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