**다형성(Polymorphism)**
동일한 메세지에 대해 다양한 형식으로 수행되는 것
즉 하나의 메서드로 여러가지 일이 수행되는 것이다.
코드의 표준화를 위해 사용한다.
다형성을 적용하기 위해서는 반드시 계층 구조 형성 되어야함
예)
재생버튼 - 곰플레이어 , CDPlayer 등
같은 메세지에 대해 각자의 방식으로 다양하게 재생된다.
--> 동일한 메서드명으로 오버라이딩
instanceof 객체 캐스팅
---------------------------------------------------------------
부모 타입의 변수로 자식 객체를 참조할 수 있다.
이 경우(부모 타입의 참조 변수)에는 부모의 상속받은
멤버와 오버라이딩한 메서드는 접근 가능.
하지만 자식의 독자적인 멤버에는 접근 불가능
--> 접근하기 위해서는 객체 캐스팅 절차가 필요하다.
Animal a=new Person();
Animal a1=new Dog();
Animal 이 부모
자식 Person , Dog
eat() 오버라이딩
다형성 지원되어 Animal 자식은 모두 처리 가능하다.
rv.pass(new Dog()); void pass(Animal a){a.eat();}
rv.pass(new Person());
rv.pass(new Tiger());
**instanceof 연산자**
객체의 타입을 비교하여 true or false 로 반환
단 is a 관계시(상속)에는 true 를 반환하므로 항상
자식부터 부모순으로 비교해야 한다.
Animal a=new Person();
System.out.println(a instanceof Person); // true
System.out.println(a instanceof Dog);// false
System.out.println(a instanceof Animal);// true
**다형성 적용 배열**
일반적으로 배열은 자신이 선언한 타입의 요소만
관리 가능
Car [] cars={ new Car("sm5"), new Car("k5")};
위와 같이 Car로 선언된 배열은 Car 객체만 추가 가능
하지만 계층구조 형성(상속관계)이 되어 있는 경우
Animal [] a={new Animal(), new Person(),new Dog()} 와 같이
하나의 부모 타입에 다양한 배열 요소를 추가할 수 있다.
이 경우 a[1] 은 Animal 타입으로 인식되어 Person의
독자적인 메서드 ticketing() 과 같은 메서드를 호출할 경우
캐스팅이 필요하다.
--다형성 예 --
class Vehicle{
public void go(){
System.out.println("가다");
}
}
class Car extends Vehicle{
public void go(){
System.out.println("자동차가 가다");
}
}
class Airplane extends Vehicle{
public void go(){
System.out.println("비행기가 가다");
}
public void fly(){
System.out.println("비행기가 날다");
}
}
public class TestPoly6 {
public static void main(String[] args) {
// 다형성이 적용되므로 Vehicle 부모타입의 배열에
// 자식 객체 요소를 추가 가능
Vehicle va[]={new Vehicle(),new Car(),new Airplane()};
// for 문 이용하여 배열의 모든 요소에 go() 를 호출!
// 이 때 Airplane 인 경우 go() 를 호출한 후 fly() 도 호출!
for(int i=0;i<va.length;i++){
va[i].go();
if(va[i] instanceof Airplane){
Airplane a=(Airplane)va[i];
a.fly();
//((Airplane) va[i]).fly();
}//if
}//for
}//main
}//class
'Code Archive > JAVA' 카테고리의 다른 글
| Step9. Set, List, Map, Generic, Iterator, 로또 출력 프로그램 (0) | 2014.09.12 |
|---|---|
| Step8. Polymorphism(다형성) interface 계층구조를 이용하여 구현 (0) | 2014.09.12 |
| Step6. 배열, Inheritance(상속) (0) | 2014.09.12 |
| Step5. 변수의 범위, Has a 관계 (0) | 2014.09.12 |
| Step4. 조건문, 반복문 (0) | 2014.09.12 |