클래스의 구현체가 몇 개가 될지 알 수 없을 경우 interface를 사용한다.
interface Predator {
String getFood();
}
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Tiger extends Animal implements Predator{
public String getFood() {
return "apple";
}
}
class Lion extends Animal implements Predator{
public String getFood() {
return "banana";
}
}
class ZooKeeper {
void feed(Predator predator) { // 호랑이가 오면 사과를 던져 준다.
System.out.println("feed"+predator.getFood());
}
}
public class Sample {
public static void main(String[] args) {
ZooKeeper zooKeeper = new ZooKeeper();
Tiger tiger = new Tiger();
Lion lion = new Lion();
zooKeeper.feed(tiger); // feed apple 출력
zooKeeper.feed(lion); // feed banana 출력
}
}
Predator interface에는 Tiger, lion 구현체들이 있다. “implements”라는 단어를 이용해 구현체임을 표시한다. 이렇게 하면 구현체를 통합한 predator 따른 feed만 구현하면 된다.