首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java多态基础

Java多态基础
EN

Stack Overflow用户
提问于 2011-04-01 02:39:45
回答 7查看 2.2K关注 0票数 8

我正在读凯西·塞拉写的南华早报的书。我发现多态有点令人困惑。

你能帮我举一个真实世界的例子吗?

我知道多态只有在你有被覆盖的方法时才有效,不管你是通过类还是通过接口来实现的,而且在运行时JVM会根据对象类型来决定方法。

假设Horse是从Animal扩展而来的,它还覆盖了eat()方法。这样做的好处是:在Horse b = new Horse(); b.eat();上使用Animal a = new Horse(); a.eat();

最终,结果将是相同的。我很抱歉这是一个非常基本的问题,但即使是我团队中的所有高级开发人员也给了我所有不同的答案。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-01 02:43:59

为了扩展您的示例,假设您有一个动物农场。那么所有动物的集合可以被定义为

代码语言:javascript
运行
复制
List<Animal> animals = new ArrayList<Animals>();
animals.add(new Horse());
animals.add(new Cow());
animals.add(new Sheep());

然后你可以遍历所有的动物,让它们都吃完

代码语言:javascript
运行
复制
for(Animal a: animals) {
    a.eat();
}

此外,它们对于设计模式也是必不可少的。我建议你在@ http://en.wikipedia.org/wiki/Design_pattern_(computer_science)上阅读关于它们的文章

票数 15
EN

Stack Overflow用户

发布于 2011-04-01 02:45:12

假设你有Animal类和三个实现:马、牛和猪。然后你有一块它们行走的田野。因此,您可以进行以下操作:

代码语言:javascript
运行
复制
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对象来选择的。

票数 6
EN

Stack Overflow用户

发布于 2011-04-01 02:44:14

假设你有一个农场。

代码语言:javascript
运行
复制
List<Animal> farm = new ArrayList<Animal>();
farm.add(new Horse());
farm.add(new Pig());
farm.add(new Chicken());

现在让他们都吃东西吧。

代码语言:javascript
运行
复制
for(Animal animal : farm){
    animal.eat();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5504666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档