다형성이란 '여러가지 형태를 가질 수 있는 능력' 을 말한다.
조상타입 참조변수로 자손타입 객체를 다룰 수 있다.
🖥 코드 작성해보기
class Tv{
boolean power; //전원상태(on/off)
int channel; //채널
void power(){
power = !power;
}
void channelUp(){
++channel;
}
void channelDown(){
--channel;
}
}
class SmartTv extends Tv{
String text; //캡션을 보여주기 위한 문자열
void caption(){/*내용생략*/}
}
Tv t = new SmartTv(); // 타입 불일치, 조상 타입의 참조변수로 자손 인스턴스를 참조함
🤔 그렇다면?
인스턴스를 같은 타입의 참조변수로 참조하는 것과
조상타입의 참조변수로 참조하는 것은 어떤 차이가 있을까?
SmartTv s= new SmartTv(); //참조 변수와 인스턴스 타입이 일치 Tv t = new SmartTv(); // 조상타입 참조변수로 자손타입 인스턴스 참조 > Tv클래스에 정의되지 않은 멤버,t.text와 t.caption()은 사용불가
둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용 할 수 있는 멤버의 개수가 달라진다.
💁🏻♀️반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 가능할까?
SmartTv s = new Tv(); // 에러. 허용 안됨! >실제 인스턴스인 Tv의 멤버 개수보다 참조변수 s가 사용할 수 있는 멤버 개수가 더 많기 때문
✅ 핵심
조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조는 불가능!
출처: 자바의 정석(도서,유튜브)