message polymorphism
상위클래스가 동일한 메세지로 하위클래스를 서로 다르게 동작 시키는 객체지향 이론
ex. 부모가 "먹다(eat)"이라는 메세지를 자식인 Dog와 Cat에게 보내면 자식 클래스는 반응을 하지만 서로 다르게 반응한다.
Animal x = new Dog();
x.eat(); // 개처럼 먹다. --> 실행 시점에서 사용될(호출될) 메서드가 결정되는 바인딩(동적바인딩)
Animal x = new Cat();
x.eat(); // 고양이처럼 먹다. --> 실행 시점에서 사용될(호출될) 메서드가 결정되는 바인딩(동적바인딩)
instanceof
: 타입확인 연산자public class PolyMethodTest {
public static void main(String[] args) {
Dog d = new Dog();
display(d);
Cat c = new Cat();
display(c);
}
public static void display(Dog d) {
d.eat();
}
public static void display(Cat c) {
c.eat();
}
}
public class PolyMethodTest {
public static void main(String[] args) {
Dog d = new Dog();
display(d);
Cat c = new Cat();
display(c);
}
// public static void display(Dog d) {
// d.eat();
// }
// public static void display(Cat c) {
// c.eat();
// }
public static void display(Animal ani) { // 다형성인수 : 하나의 타입으로 여러개의 타입을 받을 수 있다.
ani.eat();
// Cat 타입으로 받은 경우에만 실행 --> if
// ((Cat)ani).night();
if(ani instanceof Cat) { // instanceof --> 타입확인 연산자
((Cat)ani).night();
}
}
}
public class PolyArrayTest {
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
// Dog, Cat 을 저장할 배열을 생성하시오.
// Animal[] ani = {new Dog(), new Cat()};
// 다형성 배열
Animal[] ani = new Animal[2];
ani[0] = d;
ani[1] = c;
display(ani);
}
public static void display(Animal[] ani) {
for (int i = 0; i < ani.length; i++) {
ani[i].eat(); // ani[0]=Dog, ani[1]=Cat
if (ani[i] instanceof Cat) {
((Cat) ani[i]).night(); // Cat 타입일 경우에만 실행
}
}
}
}