public abstract class Food {
public abstract String getName();
}
public class Bone extends Food {
public String getName() {
return "Bone";
}
}
public class Fish extends Food {
public String getName() {
return "Fish";
}
}
-----------------------------------------------------------------
public abstract class Animal {
abstract void eat(Food food);
}
public class Dog extends Animal {
@Override
void eat(Food food) {
if (food instanceof Bone) {
System.out.println("Dog eat Bone");
} else {
System.out.println("Dog don't eat " + food.getName());
}
}
}
public class Cat extends Animal {
@Override
void eat(Food food) {
if (food instanceof Fish) {
System.out.println("Cat eat Fish");
} else {
System.out.println("Cat don't eat " + food.getName());
}
}
}
-----------------------------------------------------------------
public class Feeder {
void feed(Animal animal, Food food) {
animal.eat(food);
}
public static void main(String[] args) {
Feeder feeder = new Feeder();
Animal animal = new Dog();
feeder.feed(animal, food);
}
}