1. 다형성(polymorphism)이란?
- " 여러 가지 형태를 가질 수 있는 능력 "
- " 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 "
즉 , 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성
Tv t = new Tv();
CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();
" 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만,
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다 "
Tv t = new CaptionTv();
CaptionTv c = new Tv();
<덧붙임>
=> TV 리모콘으로 CaptionTV를 조작하는 것은 가능하다.
CaptionTV 리모콘으로 TV를 조작할 때, 리모콘에 있는 캡션 기능을 눌러봤자,
TV는 캡션 기능을 제공하지 않는다.
2. 참조변수의 형변환
- 서로 상속관계에 있는 타입간의 형변환만 가능하다.
- 자손 타입에서 조상타입으로 형변환하는 경우 , 형변환 생략가능
자손타입 -> 조상타입 ( Up-castion ) : 형변환 생략가능
자손타입 <- :="" down-casting="" nbsp="" p="">
3. instanceof 연산자
- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용.
- 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false.
- instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다.
<덧붙임>
4. 참조변수와 인스턴스변수의 연결
- 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버 변수가 달라진다.
- 메서드가 중복정의된 경우. 참조변수의 타입에 관계없이 항상 실제 인스턴스 의 타입에 정의된 메서드가 호출된다.
<덧붙임>
5. 매개변수의 다형성
- 참조형 매개변수는 메서드 호출시 , 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄수있다.
<덧붙임>
- 제품들을 구입하기 위해서는 각 제품별로 buy 메서드를 구현해야 한다.
- 그러나, Product 타입의 참조변수를 사용한다면 제품에 상관없이 buy 메서드는 한 번만
구현하면 된다.
6. 여러 종류의 객체를 하나의 배열로 다루기(Vector)
- 조상타입의 배열에 자손들의 객체를 담을 수 있다.
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();
<덧붙임>
Vector 예제
[참조] 자바의 정석
'Dev. Java' 카테고리의 다른 글
[자바 기본기] 인터페이스 (0) | 2014.05.20 |
---|---|
[자바 기본기] 추상 클래스 (0) | 2014.05.20 |
[자바 기본기] 제어자 (0) | 2014.05.18 |
[자바 기본기] package와 import (0) | 2014.05.17 |
[자바 기본기] 오버라이딩 (0) | 2014.05.16 |