message polymorphism. 하나의 메시지에 여러 해석이 가능하다는 의미에서 상위 클래스가 동일한 메시지로 하위 클래스를 서로 다르게 동작시키는 객체지향 이론을 말한다.
하나의 타입으로 여러 가지 타입을 받을 수 있다.
public static void display(Dog d){/*...*/}
public static void display(Cat c){/*...*/}
// 대신, 다형성 인수(Animal)를 활용하여 Dog타입과 Cat타입을
// 둘 다 인자로 받아드릴 수 있다.
public static void display(Animal a){/*...*/}
instanceof 연산자로 다형성 인수 실제 타입 검사하기
public static void main(String[] args){
Dog d = new Dog();
Cat c = new Cat();
d.display(); // "개"
"멍!"
c.display(); // "고양이"
}
public static void display(Animal a){
a.name();
if(a instanceof Dog){
((Dog)a).bark();
}
}
instanceof 연산자를 통해 검사할 수 있다.배열은 동일한 자료형만 저장할 수 있지만 부모타입의 배열은 자식타입을 저장할 수 있다(하나의 배열에 서로 다른 타입을 저장할 수 있다).
public static void main(String[] args){
Animal[] aArr = new Animal[2];
Dog d = new Dog();
Cat c = new Cat();
aArr[0] = d;
aArr[1] = c;
printAArrName(aArr);
}
public static void printAArrName(Animal[] aArr){
for(int i=0;i<aArr.length;i++){
System.out.println(aArr[i].name());
if(aArr[i] instanceof Dog){
((Dog)aArr[i]).bark();
}
}
}