다형성(많을 다, 형태 형)
- 여러 가지 형태를 가질 수 있는 능력(사전적 정의)
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것(실제)
다형성을 꼭 이해해야 한다.
6~7장 다형성까지 꼭 여러 번 반복을 하자.
다형성을 이해 못 하면 뒤에 다른 진도를 이해할 수 없다.
원래 Tv t = new Tv();
참조변수 타입 Tv와 객체 Tv();가 일치해야 했다.
그러나 다형성으로 이제 Tv t = new SmartTv(); 타입 불일치가 가능하다.
Tv리모컨으로 SmartTv제품을 다루는 게 가능해진다.
조상 타입 참조변수 Tv t로 자손 타입 객체 SmartTv();를 다룰 수 있다.
단, 조상, 자손인 관계에서만 가능하다.
- 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이
SmartTv s = new SmartTv();
SmartTv리모컨으로 SmartTv객체를 다룬다.
SmartTv 타입 리모컨에는 버튼이 7개이다.
SmartTv 인스턴스는 Tv멤버 5개 + SmartTv 멤버 2개 총 7개의 멤버를 가지고 있다.
SmartTv 리모컨으로는 기능 7개를 다룰 수 있다. 모든 기능 사용 가능
Tv t = new SmartTv();
Tv리모컨에는 버튼이 5개밖에 없다.
그래서 실제 SmartTv()가 7개의 멤버를 갖고 있지만
Tv리모컨이 쓸 수 있는 건 5개밖에 못쓴다.
아무리 멤버 7개를 갖고 있어도 리모컨의 버튼 개수만큼만 기능을
사용할 수 있다.
- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
Tv t = new SmartTv(); //ok
조상 5개 < 자손 7개 //ok
버튼 5개, 기능 7개인 경우는 가능하다.
있는 기능을 안 쓰는 건 괜찮다.
SmartTv s = new Tv(); //에러
자손 7개 > 조상 5개 //에러
버튼은 7개, 기능은 5개인 경우는 안된다.
실제 가지고 있는 멤버 개수보다 리모컨 버튼이 많으면 안 된다.
왜냐하면 없는 멤버를 호출해서 에러가 나기 때문이다.
'프로그래밍 언어 > 자바의 정석 기초편' 카테고리의 다른 글
자바의 정석 기초편 ch7-24,25 참조변수의 형변환(2) (0) | 2022.09.03 |
---|---|
자바의 정석 기초편 ch7-24,25 참조변수의 형변환(1) (0) | 2022.09.03 |
자바의 정석 기초편 ch7-22 캡슐화 (0) | 2022.08.28 |
자바의 정석 기초편 ch7-21 접근 제어자 (0) | 2022.08.25 |
자바의 정석 기초편 ch7-17~20 제어자, static, final, abstract (0) | 2022.08.25 |