Notice
Recent Posts
Recent Comments
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

7.3 부모 생성자 호출 - super() 본문

이것이 자바다/07 상속

7.3 부모 생성자 호출 - super()

빌드이너프 2024. 4. 2. 15:09

현실에서 부모 없는 자식이 있을 수 없듯이

자바에서도 자식 객체를 생성하면 부모 객체가 먼저 생성된 다음에 자식 객체가 생성된다

 

모든 객체는 생성자를 호출해야 한다

부모 객체도 예외는 아니다, 그렇다면 부모 객체의 생성자는 어디서 호출된 것일까?

부모 생성자는 자식 생성자의 맨 첫 줄에 숨겨져 있는 super()에 의해 호출된다

//자식 생성자 선언
pulbic 자식 클래스(...) {
  super();
  ...
}

 

super()은 컴파일 과정에서 자동 추가되는데, 부모의 기본 생성자를 호출한다

만약 부모 클래스에 기본 생성자가 없다면 자식 생성자 선언에서 컴파일 에러가 발생한다

 

!부모 클래스에 기본 생성자가 없고 매개변수를 갖는 생성자만 있다면

super(매개값, ...) 코드를 직접 넣어야 한다

//자식 생성자 선언
pulbic 자식 클래스(...) {
  super(매개값, ...);
  ...
}

 

부모 클래스가 기본 생성자를 가지고 있는 경우

package ch07.sec03.exam01;

public class Phone {
	public String model;
	public String color;
	
	//기본 생성자 선언
	public Phone() {
	}
}
package ch07.sec03.exam01;

public class SmartPhone extends Phone {
	public SmartPhone(String model, String color) {
		super(); //생략가능
		this.model = model;
		this.color = color;
	}
}

 

 

부모 클래스가 매개변수를 갖는 생성자가 있는 경우

package ch07.sec03.exam02;

public class Phone {
	public String model;
	public String color;
	
	//기본 생성자 선언
	public Phone(String model, String color) {
		this.model = model;
		this.color = color;
	}
}
package ch07.sec03.exam02;

public class SmartPhone extends Phone {
	public SmartPhone(String model, String color) {
		super(model, color); //무조건 생성해야 함
		this.model = model;
		this.color = color;
	}
}