ch7-23 다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
✨ 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
6장~7장 다형성까지 3회 반복!!!!!!!! - > 다형성 이해 못하면 뒤에 추상클래스,인터페이스 의미없음.
class Tv {
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class SmartTv extends Tv { //Tv의 자식 클래스
String text; //캡션(자막)을 보여주기 위한 문자열
void caption() { //생략 }
}
//다형성 = 조상타입 참조변수로 자손 타입 객체를 다루는 것
Tv t = new SmartTv(); // 타입 불일치도 ok
//Tv 리모콘으로 SmartTv 작동
// 일치하는게 보통.
// 두 가지 장점때문에 다형성이 중요
// 타입 불일치해도 된다.
- 객체와 참조변수의 타입이 일치할 때와 일치하지 않을때의 차이?
① SmartTv s = new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치
② Tv t = new SmartTv(); // 조상 타입 참조변수로 자손 타입 인스턴스 참조
① SmartTv 리모콘 버튼 7개 => 제품 SmartTv 멤버개수 7개 ( Tv 5개 + SmartTv 2개) - 7개 기능 모두 사용가능
② Tv 리모콘 버튼 5개 (Tv클래스에 정의된 멤버 5개) => 제품 SmartTv 멤버 7개 - 5개만 사용 가능
- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
① Tv t = new SmartTv(); // OK. 허용.
② SmartTv s = new Tv(); // 에러. 허용 안 됨.
② 리모콘 버튼 7개 > 멤버 개수 5개 (버튼으로 없는 객체를 호출할 수 없다.) => 에러
정리
Q. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하나요?
A. 아닙니다. 일치하는 것이 보통이지만 일치하지 않을 수도 있습니다.
① SmartTv s = new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치
② Tv t = new SmartTv(); // 조상 타입 참조변수로 자손 타입 인스턴스 참조
Q. 참조변수가 조상타입일 때와 자손타입일 때의 차이?
A. 참조변수로 사용할 수 있는 멤버의 개수가 달라집니다.
Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나요?
A. 아니요. 허용되지 않습니다.
'Dev > Java' 카테고리의 다른 글
[Java] 자바의 정석 기초편 ch7-26 instanceof 연산자 (0) | 2022.06.27 |
---|---|
[Java] 자바의 정석 기초편 ch7-24,25 참조변수의 형변환 (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-22 캡슐화와 접근 제어자 (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-21 접근제어자(access modifier) (0) | 2022.06.21 |
[Java] 제네릭 (Generic) (0) | 2022.06.16 |