public class Feeder { public void feed(Animal animal) { System.out.println("feed Animal."); } public void feed(Dog dog) { System.out.println("feed Dog: " + dog.eat()); } public void feed(Cat cat) { System.out.println("feed Cat: " + cat.eat()); } }
public interface Animal { String eat(); } public class Dog implements Animal { @Override public String eat() { return "骨头"; } } public class Main { public static void main(String[] args) { Animal a = new Dog(); Feeder feeder = new Feeder(); feeder.feed(a);//print: feed Animal. } }
public interface Animal { String eat(); void bindFeeder(Feeder feeder); } public class Dog implements Animal { @Override public String eat() { return "骨头"; } @Override public void bindFeeder(Feeder feeder) { feeder.feed(this); } } public class Main { public static void main(String[] args) { Animal a = new Dog(); Feeder feeder = new Feeder(); a.bindFeeder(feeder);//print:feed Dog: 骨头 } }