tiger, lion 객체는 각각 :
Tiger, Lion 클래스의 객체이면서,
Animal 클래스의 객체이기도 하고,
Barakble, Predator 인터페이스의 객체이기도 하다.
이러한 이유로 barkAnimal
메소드의 입력 자료형을 Animal
에서 Barkable
로 바꾸어 사용할 수 있는 것이다.
이렇게 하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것을 다형성, 폴리모피즘(Polymorphism)이라고 부른다.
Tiger 클래스의 객체는 다음과 같이 여러가지 자료형으로 표현할 수 있다.
Tiger tiger = new Tiger();
Animal animal = new Tiger();
Predator predator = new Tiger();
Barkable barkable = new Tiger();
여기서 알아두어야 할 사항은 Predator
로 선언된 predator 객체와 Barkable
로 선언된 barkable 객체는 사용할 수 있는 메소드가 서로 다르다는 점이다. predator 객체는 getFood()
메소드가 선언된 Predator
인터페이스의 객체이므로 getFood()
메소드만 호출이 가능하다. 이와 마찬가지로 Barkable
로 선언된 barkable 객체는 bark()
메소드만 호출이 가능하다.
만약 tiger 객체에서 getFood
, bark
둘 다 사용하고 싶다면 어떻게 해야 할까?
Predator
, Barkable
인터페이스를 구현한 Tiger
로 선언된 tiger 객체를 사용하거나,
다음과 같이 getFood
, bark
메소드를 모두 포함하는 새로운 인터페이스를 새로 만들어 사용하면 된다.