코딩하는 털보

OOP - 27 본문

IT Study/JAVA OOP

OOP - 27

이정인 2020. 12. 18. 19:38

객체 지향 프로그래밍

27. 상속에서 클래스 생성 과정과 형변환

하위 클래스 생성시 항상 상위 클래스가 먼저 생성되어야 한다.

package inheritance;

public class VIPCustomer extends Customer{ //상위 클래스(Customer) 지정

    double salesRatio;
    private int agentID;

    public VIPCustomer() {
        //super(); //아무런 상위 클래스 생성자 호출 명령이 없으면 pre-compile 단계에서 이 함수가 들어감
                   //super : 상위 클래스의 메모리 위치 함수, super() : 상위 클래스의 기본 생성자 호출
        //super(0, null); //만약 상위 클래스의 기본 생성자가 없으면, 명시적으로 상위 클래스의 생성자를 호출해야 한다.
        customerGrade = "VIP"; //만약 상위 클래스에서 private인 경우 사용할 수 없음
        bonusRatio = 0.05;
        salesRatio = 0.1;

        System.out.println("VIPCustomer() 생성자 호출");
    }
    /*public VIPCustomer(int customerID, String customerName) {
    //만약 상위 클래스의 기본 생성자가 없으면, 명시적으로 상위 클래스의 생성자를 호출해야 한다. 방법2
        super(customerID, customerName);
        customerGrade = "VIP";
        bonusRatio = 0.05;
        salesRatio = 0.1;
    }*/
}
  • 상위 클래스로의 묵시적 형변환 (업캐스팅)
    상속관계에서 모든 하위 클래스는 상위 클래스로 묵시적 형변환이 된다.
    (하위 클래스는 상위 클래스의 타입을 내포하고 있다.)
    그 역은 성립하지 않는다.
Customer Lee = new VIPCustomer();
//or
VIPCustomer Lee = new VIPCustomer();

둘다 VIPCustomer 인스턴스를 생성하는 코드이지만..
위의 코드(업캐스팅 사용한)는 type이 Customer이므로,
Customer의 변수/메서드만 접근할 수 있다.
다만 VIPCustomer관련 멤버변수 메모리는 힙 영역에 생성되긴 한다.

Comments