我知道一个接口不能在另一个接口中实现 实现意味着编写方法的主体。这不能是 在接口中完成,因为接口中的任何方法都不会 身体。 {最多Java 7}
但是我很困惑,如果这就是为什么接口不能彼此实现的原因,那么为什么接口可以在抽象类中实现。由于抽象类不能必然定义接口的所有方法。因此,以某种方式,抽象类无法实现接口的所有方法。
答案 0 :(得分:3)
接口不能使用implements
,因为它们的目的是定义接口而不提供实现。 (不过,它们可以extend
其他接口。)类的目的是提供实现,即使只是部分实现。
但是,就像几乎所有规则一样,边缘是模糊的:
现在Java接口具有默认方法,从某种意义上讲,它们可以实现一个接口,只是不使用关键字implements
:>
interface A {
void foo();
}
interface B extends A {
void bar();
default void foo() {
System.out.println("foo");
}
}
public class Example implements B
{
public static void main(String[] args) throws Exception {
new Example().foo();
}
public void bar() {
}
}
但是,从根本上讲:接口用于定义接口,而类用于提供实现。
答案 1 :(得分:3)
首先:“这不能在接口中完成,因为接口中的任何方法都没有主体。” :重要的是要注意,这有点过时了。接口可以具有方法实现/主体(默认和/或静态方法)。从Java 8开始,这是可能的。
为什么可以在抽象类中实现接口,但不能在其他接口中实现?
您的问题可能完全与implements
关键字声明有关,因为这是唯一起作用的方面。从这个意义上讲,这是设计问题。抽象类是类,接口是接口。这两种类型的组件之间存在差异,在这种情况下,最值得注意的是具体类不能从多个抽象类继承。
关于抽象类和接口(例如this)之间的区别,SO上有很好的答案。
但是,从概念上讲,一个接口可以extends
另一个接口,然后使用default
方法为每个继承的抽象方法提供一个实现。有人可能会说这是超级接口的一种实现。但是当涉及到语言的细节时,只有一个类(无论是否抽象)都可以向implement
声明一个接口。
但是,最后,无论具体方法是在接口中还是在抽象类中,在使用它们之前,都必须创建具体类的对象(在此我不包括功能接口),因此差别并不重要。
答案 2 :(得分:1)
接口可以扩展其他接口。 至于抽象类:它们要求接口方法在实现后就立即实现。但是,实现不必在抽象类中,而仅在扩展抽象类且本身不是抽象的类中。
答案 3 :(得分:1)
您必须了解一些内容。 接口实现类,抽象类是一个类。从Java文档
接口只能由类实现或由其他扩展 接口。
那为什么接口不能实现另一个接口?
因为在您实现类时,您正在定义类的行为。因此,将接口实现为另一个接口将破坏接口的用途。实现定义了您需要方法的实现,并且接口不仅仅具有类。