다형성
7.5 (다형성)
5. 다형성
- 여러 가지 형태를 가질 수 있는 능력
-
자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다향성을 구현 → 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조
Class Tv {} Class CaptionTv extends Tv {} Tv t = new CaptionTv(); // t는 CaptionTV가 Tv로부터 상속받은 멤버(Tv의 멤버만) 사용가능 // 역으로 자손타입의 참조변수로 조상인스턴스 참조하는것은 불가 // -> 자손이 가진 멤버를 조상인스턴스에서 참조하려고 하기 때문, // 참조변수가 사용할 수 있는 멤버 개수 <= 참조하려는 인스턴스의 멤버 개수
- 참조변수의 타입변환
- Up-casting
- 자손타입 → 조상타입
- 타입변환 생략 가능
- Down-casting
- 조상타입 → 자손타입
- 타입변환 생략 불가
- 상속관계가 아닌 클래스간 형변환 불가
- Up-casting
- instanceof 연산자
- 참조변수가 참조하는 인스턴스의 실제 타입을 알아보기 위해 사용
- 사용법: 참조변수 instanceof 타입
- boolean 리턴
- 자손은 조상을 포함하고 있기 때문에 자손 instanceof 조상 은 true 리턴
- instanceof로 true인 값으로 타입변환 가능
- 참조변수가 null일때 false 반환
- 파라미터의 다형성
-
클래스들의 동일한 필드를 상속 구조로 바꿈으로써 하나의 함수로 여러 클래스의 연산을 할 수 있다.
class Product { int price } class Tv extends Product{} class Computer extends Product{} Tv tv = new Tv(); Computer computer = new computer(); int buy(int balance, Product product) { return banacle - moeny }; buy(tv); buy(computer)
-
파라미터의 타입을 Object로 선언하면 모든 클래스의 연산을 할 수 있다
-
Leave a comment