【发布时间】:2011-04-01 12:02:30
【问题描述】:
在 Java 中,为了实现多重继承,我们使用接口。它是接口的唯一用途吗?如果是,Java 中接口的主要用途是什么?为什么我们需要 Java 中的接口?
【问题讨论】:
-
也是一个很好的解释here.
在 Java 中,为了实现多重继承,我们使用接口。它是接口的唯一用途吗?如果是,Java 中接口的主要用途是什么?为什么我们需要 Java 中的接口?
【问题讨论】:
我会说主要用途是多态性,或对多个不同对象执行相同操作的能力。例如,如果不同的对象都实现相同的接口并具有相同的方法,则可以将所有这些对象存储在 Vector 中,然后遍历 Vector 并在每个对象上调用该方法。
【讨论】:
您需要它们,以便在层次结构之外键入对象。
例如,可以比较的对象几乎可以位于对象层次结构中的任何位置——它们不需要有一个可以比较的共同祖先。 Strings 可以比较,Integers 可以比较,您甚至可以制作自己的Frames 可以比较(例如,如果一个帧在前景中更多,则它比另一个帧“更少” -即如果它会覆盖另一个框架)。因此,如果你想引用一个可以比较的东西,你将不得不声明一个具有最一般祖先的变量——在这种情况下,Object。这太笼统了,因为这样它也可以接收不可比较的值(并且在您尝试比较它们时会抛出错误)。
因此,接口Comparable:它选择所有实现比较功能的类跨越子类-超类层次结构。
【讨论】:
除了这些响应之外,我想说接口最重要的用途是减少软件中组件之间的耦合。
接口允许表示类之间关于它们如何相互通信的协议,而不需要与实际实现相关联。
这允许我们在不更改编译代码的情况下替换其他实现(对于测试或更改用例非常有用)。
【讨论】:
没有它,有些代码将无法编译。
例如,在:
for (String name : list)
{
System.out.print("\nIn foreach loop: name: " + name);
}
list 必须实现java.lang.Iterable interface。
【讨论】:
我也在考虑如何使用接口。我希望这对其他人有帮助:
接口是合约(或协议,或共识) 类可以做什么。当一个类实现某个 接口,它承诺为所有抽象提供实现 接口中声明的方法。接口定义了一组常用的 行为。实现接口的类同意这些 行为并为这些行为提供自己的实现。这 允许您在界面上编程,而不是在实际 执行。接口的主要用途之一是提供一个 两个对象之间的通信契约。如果你知道一门课 实现了一个接口,那么你就知道这个类包含了具体的 该接口中声明的方法的实现,并且您是 保证能够安全地调用这些方法。换一种说法, 两个对象可以根据定义的契约进行通信 接口,而不是它们的具体实现。
其次,Java 不支持多重继承(而 C++ 做)。多重继承允许您从更多 而不是一个直接的超类。如果两个直接 超类有冲突的实现。 (跟随哪一个 子类?)。但是,多重继承确实有它的位置。 Java 通过允许您“实现”多个 接口(但您只能从单个超类“扩展”)。 由于接口只包含抽象方法,没有实际的 实现时,多个接口之间不会发生冲突。 (接口可以保存常量但不推荐。如果是子类 实现了两个具有冲突常量的接口,编译器 将标记出编译错误。)
来自:http://www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6
【讨论】:
interface Comparable 的目的是否包含在您的答案中?