【问题标题】:Why do we need interfaces in Java?为什么我们需要 Java 中的接口?
【发布时间】:2011-04-01 12:02:30
【问题描述】:

在 Java 中,为了实现多重继承,我们使用接口。它是接口的唯一用途吗?如果是,Java 中接口的主要用途是什么?为什么我们需要 Java 中的接口?

【问题讨论】:

标签: java interface


【解决方案1】:

我会说主要用途是多态性,或对多个不同对象执行相同操作的能力。例如,如果不同的对象都实现相同的接口并具有相同的方法,则可以将所有这些对象存储在 Vector 中,然后遍历 Vector 并在每个对象上调用该方法。

【讨论】:

  • Rob 我同意你的观点,但我想补充一点,通过将接口实现的概念与类扩展(实际上在 c++ 中发生冲突)分开,你可以在没有多重继承的情况下拥有多态性
【解决方案2】:

您需要它们,以便在层次结构之外键入对象。

例如,可以比较的对象几乎可以位于对象层次结构中的任何位置——它们不需要有一个可以比较的共同祖先。 Strings 可以比较,Integers 可以比较,您甚至可以制作自己的Frames 可以比较(例如,如果一个帧在前景中更多,则它比另一个帧“更少” -即如果它会覆盖另一个框架)。因此,如果你想引用一个可以比较的东西,你将不得不声明一个具有最一般祖先的变量——在这种情况下,Object。这太笼统了,因为这样它也可以接收不可比较的值(并且在您尝试比较它们时会抛出错误)。

因此,接口Comparable:它选择所有实现比较功能的类跨越子类-超类层次结构。

【讨论】:

    【解决方案3】:

    除了这些响应之外,我想说接口最重要的用途是减少软件中组件之间的耦合。

    接口允许表示类之间关于它们如何相互通信的协议,而不需要与实际实现相关联。

    这允许我们在不更改编译代码的情况下替换其他实现(对于测试或更改用例非常有用)。

    【讨论】:

      【解决方案4】:

      没有它,有些代码将无法编译。

      例如,在:

      for (String name : list)
      {
          System.out.print("\nIn foreach loop: name: " + name);
      }
      

      list 必须实现java.lang.Iterable interface

      【讨论】:

      • 这本质上等同于说您需要使用某些东西,因为我们必须这样做。这并不能充分回答问题。
      • 我知道。我只是指出在这种情况下我们必须使用它们,无论我们喜欢与否。我更愿意将其视为类似于组装 PC:如果硬件连接器之间没有某种一致性,如果它们不可互换,更换电源或硬盘等部件将更加困难。如果这不能充分回答这个问题,我想至少它可以帮助人们理解它们为什么有用。
      【解决方案5】:

      我也在考虑如何使用接口。我希望这对其他人有帮助:

      接口是合约(或协议,或共识) 类可以做什么。当一个类实现某个 接口,它承诺为所有抽象提供实现 接口中声明的方法。接口定义了一组常用的 行为。实现接口的类同意这些 行为并为这些行为提供自己的实现。这 允许您在界面上编程,而不是在实际 执行。接口的主要用途之一是提供一个 两个对象之间的通信契约。如果你知道一门课 实现了一个接口,那么你就知道这个类包含了具体的 该接口中声明的方法的实现,并且您是 保证能够安全地调用这些方法。换一种说法, 两个对象可以根据定义的契约进行通信 接口,而不是它们的具体实现。

      其次,Java 不支持多重继承(而 C++ 做)。多重继承允许您从更多 而不是一个直接的超类。如果两个直接 超类有冲突的实现。 (跟随哪一个 子类?)。但是,多重继承确实有它的位置。 Java 通过允许您“实现”多个 接口(但您只能从单个超类“扩展”)。 由于接口只包含抽象方法,没有实际的 实现时,多个接口之间不会发生冲突。 (接口可以保存常量但不推荐。如果是子类 实现了两个具有冲突常量的接口,编译器 将标记出编译错误。)

      来自:http://www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6

      【讨论】:

      • interface Comparable 的目的是否包含在您的答案中?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2012-05-23
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      相关资源
      最近更新 更多