【问题标题】:What happens when only a few element from a list are from the same interface当列表中只有几个元素来自同一个接口时会发生什么
【发布时间】:2021-09-21 21:58:28
【问题描述】:

鉴于我有这门课:

class Animal {
    void walk() { } 
    ....
    .... //other methods 
} 

与能够咀嚼的动物的界面相结合:

interface Chewable {
    void chew();
}

并让 Reptile 类实现此功能,而不是 Birds(因为 Birds 无法咀嚼):

class Reptile extends Animal implements Chewable { } 

如果是鸟类:

class Bird extends Animal { }

这里爬行动物和鸟类都是Animal的接口。

如果我必须遍历一个 IAnimals 列表,并调用它们的chew() 函数,那么当列表中有一只鸟时会发生什么?

【问题讨论】:

  • 当您尝试遍历 IAnimal 列表并调用它们的咀嚼函数时发生了什么?
  • 我建议您阅读 Java 中“泛型”的工作原理。如果您询问有关迭代 ArrayList 或类似的问题。当然也可以尝试一下!
  • 所以我测试了自己,或多或少有些困惑。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java list loops interface


【解决方案1】:

Animal 类没有实现Chewable 接口,因此如果您有一个包含鸟类和爬行动物的Animal 类型的列表,它将没有chew() 方法。这是因为Animal 类型只“知道”它自己的成员和方法。

【讨论】:

  • 那么实际上Bird和Reptile可以列在同一个列表对象中吗?
  • 正确,这是因为 Bird 和 Reptile 也是 Animal 类型,因为它们都扩展了 Animal 类。这是一个多态的例子,详细解释here
  • 谢谢,现在一切都清楚了。另外,我刚刚了解了 instanceof 和类型转换,它们在特定情况下非常有用。
【解决方案2】:

如果你遍历一个Animal列表(List),你只能调用属于Animal的方法。因此你不能调用chew()。

【讨论】:

  • 谢谢,我自己测试了一下,发现我只是在冰山一角
猜你喜欢
  • 2014-08-25
  • 2011-08-25
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2015-05-10
  • 2011-01-08
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多