【发布时间】:2018-01-24 16:14:02
【问题描述】:
我们现在正在我的 DSA 类中重新创建 List 接口以及 ArrayList 和 LinkedList 类,以显示两者在添加/删除方面的低效率 |分别获取/设置。
教授给了我们一个我以前从未听说过的概念,那就是“对接口进行编码”。帮助消除冗余似乎是合乎逻辑的,但是我遇到了一个问题,我不确定这是否是 IDE 问题,或者这是预期的行为。
像这样设置 ArrayList 时(使用自定义接口和类,而不是来自 util 包):
public class foobar{
List<String> arraylist;
public foobar(){
arraylist = new ArrayList<String>();
...
未找到 ArrayList 类中的 size() 方法,但在 ArrayList 类中。
然而,当 ArrayList 被实例化而不编码到接口时,即。
...
ArrayList<String> arraylist;
public foobar(){
arraylist = new ArrayList<String>();
...
size() 方法可用。
这是正确的行为吗? 也许我误解了这个概念以及我一直在阅读的关于接口编码的内容,但似乎唯一可用的方法是类中定义的接口中的方法。
编辑:感谢所有回复!我阅读了更多关于多态性的内容,现在一切都变得有意义了。抱歉这个愚蠢的问题,我不明白为什么它会这样工作
【问题讨论】:
-
根据您的描述,
size方法似乎是在ArrayList(实现)中定义的,而不是在Listinterface本身中定义的。因此,当您使用List时,虽然它由ArrayList支持,但它只能充当List,因为这就是它的全部保证。这被称为多态性 -
如果您希望
List的所有实现都能够提供size方法,那么您需要在Listinterface中定义该合约