구조
부모 클래스 Animal 을 상속 받는 Tiger,Human,Eagle
package chapter10.polymorphism;
//부모클래스Animal
class Animal{
void move() {
System.out.println("동물이 움직입니다.");
}
}
//클래스 Human
class Human extends Animal{
@Override
void move() {
System.out.println("사람이 두발로 움직입니다.");
}
}
//클래스 Tiger
class Tiger extends Animal{
@Override
void move() {
System.out.println("호랑이가 네발로 뜁니다");
}
}
//클래스 Eagle
class Eagle extends Animal{
@Override
void move() {
System.out.println("독수리가 하늘을 압니다");
}
}
public class Polymorphism {
//메서드
public static void main(String[] args) {
// 다형성
//설명2
Animal a = new Tiger();
Animal b = new Human();
Animal c = new Eagle();
movePrint(a);
movePrint(b);
movePrint(c);
//설명1
//객체생성
// 바로 객체 생성 <동일함 변수에 바로담지 않았을뿐> // 변수t 에 생성한 걸 담음
movePrint(new Tiger()); //Tiger t = new Tiger();
movePrint(new Human());
movePrint(new Eagle());
}
//메서드
public static void movePrint(Tiger t) {
t.move();
}
public static void movePrint(Human t) {
t.move();
}
public static void movePrint(Eagle t) {
t.move();
}
//메서드 //위의 메서드 대신에 쓸 수 있음.//is a 관계 성립으로 인해 사용..가능....
public static void movePrint(Animal a) {
a.move();
}
}
<출력결과>
호랑이가 네발로 뜁니다 사람이 두발로 움직입니다. 독수리가 하늘을 압니다 호랑이가 네발로 뜁니다 사람이 두발로 움직입니다. 독수리가 하늘을 압니다
<설명>
포인트1)
movePrint(a);
movePrint(b); movePrint(c);
이 코드는 아래의 코드와 동일한 기능을 함.(변수에 담았냐 안담았냐의 차이)
movePrint(new Tiger());
movePrint(new Human());
movePrint(new Eagle());
포인트2)
아래의 메서드가 없더라도
public static void movePrint(Tiger t) { t.move(); } public static void movePrint(Human t) { t.move(); } public static void movePrint(Eagle t) { t.move(); }
아래의 메서드로 같은 기능을 함(is a 관계)
public static void movePrint(Animal a) { a.move(); }
:좌변의 객체가 우변의 타입이 맞는지 확인
ex) animal instanceof Dog ⇒ 거짓
Dog **instanceof** animal ⇒ 참