我通过动物的例子学习了多态性。在实践中实际上并没有多大意义,但理解这些原则是很好的。
首先正确的方法:
class Animal {
public void eat() {/* code for eating */};
public void sleep() {/* code for sleeping */};
}
class Dog extends Animal {
public void bark() { /* code for barking */ }
}
class Duck extends Animal {
public void quack() { /* code for quacking */ }
}
使用此代码,您可以执行以下操作:
{
Dog lassie = new Dog();
Duck donald = new Duck();
lassie.eat();
lassie.sleep();
lassie.bark();
donald.eat();
donald.sleep();
donald.quack();
List<Animal> barn = new ArrayList<Animal>();
barn.Add(lassie);
barn.Add(donald);
}
两者donald
和lassie
都可以eat()
和sleep()
,因为它们都是Animal
s。他们每个人都发出自己的声音,他们可以塞在一起,因为他们都是Animal
s。
反例将如下代码:
class Dog {
public void bark() { /* code for barking */ }
public void eat() {/* code for eating */};
public void sleep() {/* code for sleeping */};
}
class Duck {
public void quack() { /* code for quacking */ }
public void eat() {/* code for eating same as code in Dog */};
public void sleep() {/* code for sleeping same as code in Dog */};
}
现在您不能将它们都放在同一个容器中,因为它们是不同的类型。此外,您必须编写两次相同的代码(eat
ing 和sleep
ing)。