상속과 생성자

·2025년 4월 14일

Power Java

목록 보기
26/75

6.3 상속과 생성자

자식 클래스의 객체가 생성될 때,
자식 클래스의 생성자 뿐 아니라 부모 클래스의 생성자도 같이 호출된다.

1) 자식 클래스의 객체 생성
2) 자식 클래스의 생성자 호출
3) 자식 클래스의 생성자에서 부모 클래스의 생성자 자동 호출
(상속 관계일 경우)
4) 부모 클래스의 생성자가 먼저 실행
5) 자식 클래스의 생성자가 실행

*이유
자식 클래스의 생성자에 super();가 생략되어 있기 때문이다.

< 명시적인 호출 >
•부모 클래스

class Base {
	public Base() {
    	System.out.println("Base 생성자()");
    }
};

•자식 클래스

class Derived extends Base {
	public Derived() {
    	super();
        System.out.println("Derived 생성자()");
    }
};

=> super()를 명시적으로 표기하였다.

< 묵시적인 호출 >
•자식 클래스

class Derived extends Base {
	public Derived() {
    	"생략"
        System.out.println("Derived 생성자()");
    }
};

=> super()을 작성하지 않아도 자동 호출된다.

*묵시적인 호출인 경우, 부모 클래스에 기본 생성자(매개 변수가 없는 생성자=자동 생성되는 생성자)가 반드시 정의되어 있어야 한다.
명시적 호출을 해주거나,
부모 클래스에 기본 생성자를 만들어주면 해결된다.

< 부모 클래스의 생성자 선택 >
-부모 클래스의 생성자가 여러 개 정의되어 있는 경우,
자식 클래스는 그 중의 하나를 선택할 수 있다.

•부모 클래스

class TwoDimPoint {
	int x, y;	//인스턴스 변수 선언
    
    // 생성자 (1)
    public TwoDimPoint() {
    	x = y = 0;
    }
    
    // 생성자 (2)
    public TwoDimPoint(int x, int y) {
    	this.x = x;
        this.y = y;
    }
};

•자식 클래스

class ThreeDimPoint extends TwoDimPoint {
	int z;
    public ThreeDimPoint(int x, int y, int z) {
    	super(x, y);
        this.z = z;
    }
};

=> 인수의 형태에 따라 적절한 생성자가 선택된다.
x,y를 상속받으려고 하므로 생성자 (2)가 호출된다.

0개의 댓글