【问题标题】:Implementation of interface in Java codeJava代码中接口的实现
【发布时间】:2017-08-07 18:21:48
【问题描述】:

所以我有一行代码:

List<Deque<Integer>> pegs = new Arraylist<>();
for(int i=0; i< NUM_PEGS; i++){
   pegs.add(new LinkedList<Integer>());
}

我想知道 Arraylist 通过实现接口 List 可以获得哪些额外功能?我之所以能够将 LinkedList 添加到 pegs 是因为 LinkedList 实现了 Deque 接口吗?

【问题讨论】:

  • Java Polymorphism的可能重复
  • 尝试用谷歌搜索“Java API”。阅读 ArrayList、LinkedList、List 和 Deque 的页面。真相就在那里。
  • 你可以阅读javadocs看是的,LinkedList实现了Deque。另外,阅读多态性和面向对象编程概念。

标签: java


【解决方案1】:

我不会说 ArrayList 通过实现 List 接口来获得额外的功能。它实际上提供了比 List 合约中指定的功能更多的功能。您可以比较 ListArrayList 的文档以查看差异。

对于第二个问题,是的,您可以在 Deque 的文档中看到它是由 LinkedList 等实现的。

【讨论】:

  • 在这种情况下实施 List 的动机是什么。为什么不只拥有一个 Arraylist?
  • 没错。接口就像指定类必须具有的最少方法的类型,它们不添加功能,它们保证最少的功能。可以通过接口类型实现这一功能,但类仍然必须在基类中定义。
  • @John 重点是你可以编写接受至少一个 List(任何实现 List)的方法,而不用关心 LinkedList、ArrayList 或任何其他类型的 List 被传入。你知道它们至少实现了 List 接口的功能。
【解决方案2】:

通常,类不会通过实现接口来接收任何“额外功能”。

(自 java 8 以来,这发生了一些变化,因为接口现在可以包含 default 方法,所以实际上可以通过实现接口来接收额外的功能,但这不是这个问题的主题。)

当实现一个接口时,一个类必须提供该接口需要提供的所有功能。必须将代码添加到类中以提供该功能。 ArrayList 做这一切是为了提供List 接口。

那么,您可能会问,实现接口的意义何在?

关键是,然后在您的代码中,您可以将列表简单地称为List,而不知道它实际上是ArrayList,这意味着您的代码可以与任何实现@的类一起使用987654326@接口,不仅仅是ArrayList

至于你的第二个问题:答案是“是”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2011-08-26
    • 2015-11-08
    • 2017-10-21
    相关资源
    最近更新 更多