상속과 생성자
상속에서 생성자 규칙
상속된 클래스로부터 인스턴스가 생성될 때 부모 클래스인 상위 클래스의 생성자가 자식 클래스인 하위 클래스의 생성자보다 먼저 수행합니다.
부모 클래스인 상위 클래스의 매개변수가 없는 생성자가 묵시적으로 수행됩니다.
매개변수가 없는 묵시적인 생성자가 아닌 다른 생성자를 호출(오버로딩의 경우)하고자 한다면 super 키워드를 사용하여 명시적으로 호출해야 합니다.
class CalTestP {
int f1, f2;
CalTestP(int f1, int f2){ // CalTestP 생성자
System.out.println("CalTestP 초기화 !!!");
this.f1 = f1; this.f2 = f2;
}
public int sum(){return this.f1+f2;}
}
class CalTestP2 extends CalTestP {
// 부모클래스가 인자를 받는 생성자가 있으면 자식클래스도 인자를 받는 생성자를 생성해주어야 함
CalTestP2(int f1, int f2) {// 이클립스 추천기능으로 생성(부모와 매칭되는 인자를 받는 생성자를 자동으로 생성)
super(f1, f2); // super 키워드를 사용하여 부모 클래스인 상위 클래스의 생성자를 명시적으로 호출함
System.out.println("CalTestP2 초기화 !!!");
}
public int mul(){ return this.f1*f2; }
}
부모 클래스인 상위 클래스에 매개변수가 없는 기본 생성자가 없고, 인자를 주는 생성자만 명시된 경우에는,
자식 클래스인 하위 클래스에서 생성자를 만들어주지 않는다면 컴파일이 되지 않습니다.
자식 클래스인 하위 클래스에서 생성자를 호출하는 경우는 인스턴스를 생성하는 경우로, 정의한 생성자가 없기 때문에 부모 클래스인 상위 클래스의 생성자를 사용해야 하지만, 명시적으로 인자를 받는 생성자만 상위 클래스에 만들어져 있어서 기본 생성자가 없는 것으로 받아들여지기 때문입니다.
자식 클래스인 하위 클래스에서도, 기본 생성자는 만들지 않고, 인자를 받는 생성자만 만들었을 경우에는 인수를 주지 않고 인스턴스를 생성할 수 없습니다.
따라서 부모 클래스인 상위 클래스에서 인자를 받는 생성자만 만들었을 경우에는,
자식 클래스인 하위 클래스에서도 인자를 받는 생성자를 만들어 주어야 합니다.
'자바' 카테고리의 다른 글
Boolean 데이터 타입 (0) | 2021.11.16 |
---|---|
자바의 다형성(polymorphism) 구현 (0) | 2021.11.16 |
자바 오버로딩(Overloading), this , super (0) | 2021.11.12 |
자바 오버라이드(Override) (0) | 2021.11.10 |
자바 상속 (0) | 2021.11.10 |
댓글