다형성(polymorphism)
1.다형성이란?
조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는것.
Tv t = new Tv();
CaptionTv c = new CaptionTv();
=> Tv t = new CaptionTv();
Tv가 조상타입, CaptionTv가 자손타입.
2.반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
3.참조변수의 형변환
- 서로 상속관계에 있는 타입간의 형변환만 가능하다.
- 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능.
- 조상타입에서 자손타입으로 형변환 불가.
class Car{}
class FireEngne extends Car{}
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
car = fe; //(Car 생략가능)
fe2 = (FireEngine) car;
4.instanceof연산자
- 참조변수가 참조하는 인스턴느의 실제타입을 체크하는데 사용.
- instanceof의 연산결과가 true이면, 해당타입으로 형변환이 가능하다.
5.참조변수와 인스턴스변수의 연결
참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨 줄 수 있다.
class Product{}
class Tv extends Product {}
class Computer extends Product {}
class Audio extends Product {}
Tv tv = new tv();
Computer com = new Computer();
void buy (Tv t) {
money-=t.price;
bonusPoint += t.bonusPoint;
}
위와 같이 한다면 모든 제품을 등록할 때마다 buy함수를 추가해 주어야 한다.
따라서 위의 buy 메서드는 다음과 같이 바꿀 수 있다.
Product p1 = new Tv;();
Product p2 = new Computer();
Product p3 = new Audio();
void buy(Product p){
money-=p.price;
bonusPoint += p.bonusPoint;
}
매개변수가 Product타입의 참조변수라는 것은, 메서드의 매개변수로 Product클래스의 자손타입의 참조변수면 어느 것이나 매개변수로 받아들일 수 있다는 뜻이다.
6.조상타입의 배열에 자손들의 객체를 담을 수 있다.
Product p1 = new Tv();
Product p2 = new Computer();
Product p3 = new Audio();
위의 코드를 다음과 같이 배열에 넣어보자.
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
'JAVA의 정석' 카테고리의 다른 글
7.객체지향개념2 - 추상클래스와 인터페이스 (0) | 2015.07.20 |
---|