polymorphism

구조
부모 클래스 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(); }

instance of

:좌변의 객체가 우변의 타입이 맞는지 확인

ex) animal instanceof Dog ⇒ 거짓

  Dog  **instanceof**  animal ⇒ 참