다형성(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

+ Recent posts