상속과 다운캐스팅
다형성 : 여러가지 형태를 가질 수 있는 능력. 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하며 객체지향 프로그래밍의 재활용성, 유지보수성에 대한 대표적 특징이 된다.
캐스팅(Casting) : 형변환. 타입을 변환하는 것
업캐스팅(Upcasting) : 상속 관계에서 자식 클래스의 객체가 부모 클래스의 타입으로 캐스팅 되는 것
ex)
Customer vc = new VIPCustomer();
상위클래스 Customer의 변수 vc를 하위클래스인 VIPCustomer 인스턴스로 선언하면 묵시적으로 자동 형변환 됨
ex)
VIPCustomer vCustomer = (VIPCustomer)vc;
※ 하위클래스로의 형변환은 명시적으로 지정해줘야한다는 특징이 있음
: 참조변수가 참조하고있는 인스턴스의 실제 타입을 알아보기 위해 사용하는 연산자
if (Customer instanceof VIPCustomer) {}
이렇게 사용되며 해당 인스턴스의 형이 원래 인스턴스 타입이라면 true, 아니면 false를 반환한다.
다운캐스팅을 하면 코드가 지저분해지고 코드 내 많은 if문 사용으로 효율이 좋지 않을수도 있다.
꼭 원래상태로 되돌려놔야하는 상황이 아니라면 오버라이딩 하는 편이 훨씬 깔끔할 수 있다.