본문 바로가기
정리하기 이전 자료 ( before 20-11 )/Java

상속에서의 생성자

by IMSfromSeoul 2020. 3. 29.

생성자

class Customer{
    public Customer(){
        System.out.println("고객 호출");
    }
}
class VipCustomer extends Customer{
    public VipCustomer(){
    // super(); 자동생성
        System.out.println("VIP고객 호출");
    }
}

public class Test {

    public static void main(String args[]) {
        VipCustomer vipCustomer = new VipCustomer();
    }
}

출력결과:

고객 호출
VIP고객 호출

- Customer는 생성하지 않고 Customer의 하위 클래스인 VipCustomer의 인스턴스만 생성했지만, Pre-compile 단계에서 알아서 super()를 생성해준다.

 

- super는 this와 같은 맥락으로, 상위클래스의 메모리 위치, 즉 참조값을 가지고 있다. 

 

-  하위 클래스가 호출되기 전, 상위 클래스가 먼저 호출된다.

 

class Customer{
    public Customer(String name){
        System.out.println( name + "고객 호출");
    }
}
class VipCustomer extends Customer{    -----------> ERROR !
    public VipCustomer(){
        System.out.println("VIP고객 호출");
    }
}

- 다음과 같은 경우 오류가 뜨는데, 이는 Customer에서 생성자를 매개변수를 받는 타입으로 만들었으므로 VipCustomer에도 이를 명시해주어야 컴파일러가 해석할 수 있다.

class Customer{
    public Customer(String name){
        System.out.println( name + "고객 호출");
    }
}
class VipCustomer extends Customer{   
    public VipCustomer(){
    	super("hi");
        System.out.println("VIP고객 호출");
    }
}

- 다음과 같이 상위클래스의 생성자를 명시해주면 오류가 해결된다.

 

( 상위 클래스에 매개 변수만 있는 생성자가 있을 경우, 하위 클래스의 생성자에 명시를 해주어야 한다. )

'정리하기 이전 자료 ( before 20-11 ) > Java' 카테고리의 다른 글

추상클래스 & 템플릿 메서드  (0) 2020.03.30
DownCasting & instance of  (0) 2020.03.29
다형성 , 상속, 가상함수 , 동적바인딩  (0) 2020.03.28
ArrayList 기초  (0) 2020.03.28
배열 ( Array )  (0) 2020.03.27

댓글