▶ 다형성 (polymorphism)
- 여러가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
- 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이?
SmartTV s = new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치
TV t = new SmartTv(); // 조상 타입 참조변수로 자손 타입 인스턴스 참조 ; 불일치도 OK
ex) 스마트 티비를 스마트티비 리모컨( 기능 7개 )으로 사용한다면 모든 기능( 기능 7개 )을 사용할 수 있음
티비 리모컨( 기능 5개 )으로 사용한다면 일부 기능만 사용 가능함 (리모컨에 있는 기능까지만 가능)
- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
TV t = new SmartTv(); // OK. 허용 ( TV = 조상 , SmartTv = 자손 )
SmartTv s = new TV(); // 에러. 허용 안 됨. ( SmartTv = 자손 , TV = 조상 )
ex) 두번째 코드의 경우 스마트 티비 리모컨( 기능 7개 )로
일반 티비 (기능 5개 )를 동작 하려고 하는 것이기 때문에 사용 불가
멤버 개수 > 실제 개수 : OK // 멤버 개수 < 실제 개수 : 에러
정리
Q. 참조 변수의 타입은 인스턴스의 타입과 반드시 일치해야 하나?
A. 아니다. 일치하는 것이 보통이지만 일치하지 않을 수도 있음
SmartTV s = new SmartTV(); // 참조 변수와 인스턴스의 타입이 일치
TV t = new SmartTV(); // 조상 타입 참조변수로 자손 타입 인스턴스 참조 --> 다형성
Q. 참조 변수가 조상타입일 때와 자손타입일 때의 차이?
A. 참조변수로 사용할 수 있는 멤버의 갯수가 달라짐.
Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나?
A. 아니다. 허용되지 않음.
TV t = new SmartTV(); // OK. 허용. ( TV = 조상(5개) < SmartTV = 자손(7개) )
SmartTV s = new TV(); // 에러. 허용 안 됨. ( SmartTV = 자손(7개) > TV = 조상(5개) )
'자바의 정석 - 기초편' 카테고리의 다른 글
이클립스 콘솔 한글깨짐 (0) | 2022.09.13 |
---|---|
캡슐화 (0) | 2022.08.31 |
접근 제어자 (0) | 2022.08.24 |
제어자, static, final, abstract (0) | 2022.08.23 |
import문 /static import문 (0) | 2022.08.23 |