Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- 취준생
- 독학
- 백앤드
- 프로그래머스
- 추상화
- exception
- Java
- Calendar Class
- 클래스의구조
- 국비지원
- do~while문
- 예외처리
- 자바
- 개발자
- 생성자
- 캐스팅연산자
- 개발
- super 생성자
- for문
- userDefineException
- 가위바위보프로그램
- 예외던지기
- AoutoBoxing
- 비전공자
- Date Class
- 코딩
- 알고리즘
- 부모 생성자
- 사용자 정의 예외처리
- 상속
Archives
- Today
- Total
유난스런 개발 기록
[JAVA] Day-16 _ super() 생성자 (super constructor) 본문
day-16
super() 생성자 (super constructor)
super() 생성자 란?
- 같은 클래스에 있는 다른 생성자를 호출할 때 사용하는 this() 처럼
- 상속에서 부모 클래스의 생성자를 호출할 때는 super()를 사용한다.
- super() 는 부모 클래스의 기본 생성자를 의미한다.
- 부모클래스의 기본 생성자는 생략하더라도 무조건 호출 되어진다.
코드블럭 안의 코드를 통해 확인해보자.
부모 클래스의 생성자
ckage my.day16.b.superConstructor;
public class Parent {
// field
String id;
String passwd;
// 부모클래스의 기본 생성자
public Parent() {
id = "eomjh";
passwd = "1234";
System.out.println(">>> 확인용 Parent 클래스의 기본생성자 호출함 <<< ");
}
}
부모 클래스의 경우 필드를 생성해준 후, 기본 생성자를 만들어 값을 넣어주었다.
이후 부모 생성자가 자식 생성자보다 무조건 먼저 호출되는 것을 확인하고자
확인용 문장을 넣어줬다.
자식 클래스의 생성자
package my.day16.b.superConstructor;
public class Child extends Parent {
// field
String name;
// 기본생성자
public Child() {
// super(); // super() 는 부모클래스의 기본생성자를 말하는 것이다.
// 부모클래스의 기본생성자를 생략하더라도 무조건 호출 되어진다.
name = "엄정화";
System.out.println("=== 확인용 Child 클래스의 기본생성자 호출함 ===");
}// end of public Child()--------------------------
// method
void ChildInfo() {
System.out.println("아이디 : " + super.id + "\n"
+"암호 : " + this.passwd + "\n"
+"성명 : " + this.name);
}
}
자식 클래스는 extends 를 통해 부모 클래스를 상속 받았다.
때문에 자식 클래스의 기본 생성자를 선언 후 부모 클래스의 기본 생성자를 호출해주었다.
주석 처리를 한 이유는, 부모 클래스의 기본 생성자를 생략하더라도 무조건 호출되는 것을 확인하기 위함이다.
id 값은 this.id 로 선언할 수 있지만 현재 클래스에서는 굳이 써주지 않아도 헷갈일 일이 없어 생략했다.
이후 부모 클래스의 기본 생성자 값과 자식 클래스의 기본 생성자 값을 넣어 출력해주는 메소드를 생성했다.
메인 클래스
package my.day16.b.superConstructor;
public class MainTest {
public static void main(String[] args) {
Child child = new Child();
/*
>>> 확인용 Parent 클래스의 기본생성자 호출함 <<<
=== 확인용 Child 클래스의 기본생성자 호출함 ===
*/
// 자식클래스(Child)의 기본생성자가 호출되어질 때는
// 항상 부모클래스(Parent)의 기본생성자가 먼저 호출되어지고 나서 그 다음에 자식클래스(Child)의 기본생성자가 호출되어진다.
child.ChildInfo();
/*
아이디 : eomjh
암호 : 1234
성명 : 엄정화
*/
}
}
메인 클래스에선 부모 클래스와 자식 클래스에서 작성한 코드를 실행시켜줄 것이다.
메인 클래스에 child 객체를 생성하고 Child 클래스의 메소드를 호출하면
우리가 알아보고자 했던 super() 생성자가 어떻게 동작하는지 알 수 있다.
가장 먼저 확인용 Parent 클래스의 기본 생성자
즉, 부모 클래스의 기본 생성자가 호출되는 것을 확인할 수 있다.
그리고 메소드 또한 부모 클래스로 부터 상속 받아 사용한 필드들이 문제 없이 제 역할을 하는 것도 볼 수 있다.
'개념정리 > JAVA' 카테고리의 다른 글
[JAVA] Day-16 _ 접근 제어자 (access modifier) (0) | 2023.02.06 |
---|---|
[JAVA] Day-16 _ 초기화 블럭 (initialization block) (0) | 2023.02.01 |
[JAVA] Day-15 _ 다형성 (Polymorphism) & 추상 클래스 (Abstract Class) (0) | 2023.01.29 |
[JAVA] Day-14 _ 상속성 (Inheritance) (0) | 2023.01.29 |
[JAVA] Day-13 _ 캡슐화 (Encapsulation) (0) | 2023.01.29 |