我正在读凯西·塞拉写的南华早报的书。我发现多态有点令人困惑。
你能帮我举一个真实世界的例子吗?
我知道多态只有在你有被覆盖的方法时才有效,不管你是通过类还是通过接口来实现的,而且在运行时JVM会根据对象类型来决定方法。
假设Horse是从Animal扩展而来的,它还覆盖了eat()方法。这样做的好处是:在Horse b = new Horse(); b.eat();上使用Animal a = new Horse(); a.eat();
最终,结果将是相同的。我很抱歉这是一个非常基本的问题,但即使是我团队中的所有高级开发人员也给了我所有不同的答案。
发布于 2011-04-01 02:43:59
为了扩展您的示例,假设您有一个动物农场。那么所有动物的集合可以被定义为
List<Animal> animals = new ArrayList<Animals>();
animals.add(new Horse());
animals.add(new Cow());
animals.add(new Sheep());然后你可以遍历所有的动物,让它们都吃完
for(Animal a: animals) {
a.eat();
}此外,它们对于设计模式也是必不可少的。我建议你在@ http://en.wikipedia.org/wiki/Design_pattern_(computer_science)上阅读关于它们的文章
发布于 2011-04-01 02:45:12
假设你有Animal类和三个实现:马、牛和猪。然后你有一块它们行走的田野。因此,您可以进行以下操作:
List<Animal> animals = new ArrayList<Animal>(3);
animals.add(new Horse());
animals.add(new Cow());
animals.add(new Pig());
for (Animal animal : animals) {
animal.eat();
}因此,在这个循环中,你并不介意你有什么创造的动物:它可以是猪,也可以是牛,或者完整的列表可以只有马。但它们都是动物,它们都能吃东西。多态在这里是很棒的,因为不管你有什么动物,eat方法都是根据concreate对象来选择的。
发布于 2011-04-01 02:44:14
假设你有一个农场。
List<Animal> farm = new ArrayList<Animal>();
farm.add(new Horse());
farm.add(new Pig());
farm.add(new Chicken());现在让他们都吃东西吧。
for(Animal animal : farm){
animal.eat();
}https://stackoverflow.com/questions/5504666
复制相似问题