为什么一个接口不能实现另一个接口?

我的意思是:

interface B {...} interface A extends B {...} // allowed interface A implements B {...} // not allowed 

我GOOGLE了,我发现这个 :

implements表示定义接口方法的实现。 但是接口没有实现,所以这是不可能的。

然而,接口是一个100%的抽象类,抽象类可以实现接口(100%抽象类)而不用实现它的方法。 什么是定义为“接口”的问题?

具体而言,

 interface A { void methodA(); } abstract class B implements A {} // we may not implement methodA() but allowed class C extends B { void methodA(){} } interface B implements A {} // not allowed. //however, interface B = %100 abstract class B 

implements意味着实现,当interface是为了声明只是提供interface而不是实现。

一个100%的abstract class在function上等同于一个interface但是如果你愿意,它也可以实现(在这种情况下,它不会保持100% abstract ),所以从JVM的angular度来看,它们是不同的东西。

此外,100%抽象类中的成员variables可以具有任何访问限定符,其中在接口中它们隐式地为public static final

implements意味着一个行为将被定义为abstract方法(除了抽象类显然),你定义的实现。

extends意味着行为被inheritance。

通过接口,可以说一个接口应该具有与另一个接口相同的行为,甚至没有实际的实现。 这就是为什么一个接口extends另一个接口而不是实现它更合理。


请注意,即使一个abstract类可以定义abstract方法(一个接口的确切方式),它仍然是一个 ,仍然必须被inheritance(扩展)并且不被实现。

概念上有两个“域”类和接口。 在这些领域里,你总是在延伸,只有一个类实现了一个界面,这是一种“越界”。 所以基本上“扩展”接口反映类的行为。 至less我认为这是背后的逻辑。 似乎并不是所有人都同意这种逻辑(我自己也觉得这有些人为devise),实际上没有任何技术上的理由有两个不同的关键字。

然而,接口是100%的抽象类,而抽象类可以实现接口(100%抽象类)而不实现其方法。 什么是定义为“接口”的问题?

这只是一个约定的问题。 java语言的作者决定“扩展”是描述这种关系的最好方式,所以这就是我们所使用的。

一般来说,即使一个接口是“100%抽象类”,我们也不会这么想。 我们通常认为接口是实现某些关键方法的承诺,而不是从类派生出来的类。 所以我们倾向于为接口使用不同的语言而不是类。

正如其他人所说的,select“扩展”到“工具”是有很好的理由的。

希望这将有助于你在我的拼贴画中学到的东西(核心java)。

实现表示定义一个接口方法的实现。 但是接口没有实现,所以这是不可能的。 然而,一个接口可以扩展另一个接口,这意味着它可以添加更多的方法并inheritance它的types。

这里是一个例子下面,这是我的理解,我在哎呀学到了什么..!

 interface ParentInterface{ void myMethod(); } interface SubInterface extends ParentInterface{ void anotherMethod(); } 

并保留一件事,一个接口只能扩展另一个接口,如果你想定义它的某些类的function,那么只有一个接口在实现,例如下面

 public interface Dog { public boolean Barks(); public boolean isGoldenRetriever(); } 

现在,如果一个类实现了这个接口,这就是它的样子:

 public class SomeClass implements Dog { public boolean Barks{ // method definition here } public boolean isGoldenRetriever{ // method definition here } } 

如果一个抽象类有一些抽象函数定义和声明,并且你想要定义这些函数,或者你可以说实现这些函数,那么你就可以扩展这个类,因为抽象类只能被扩展。 这里是下面的例子。

 public abstract class MyAbstractClass { public abstract void abstractMethod(); } 

这里是MyAbstractClass的一个例子子类:

 public class MySubClass extends MyAbstractClass { public void abstractMethod() { System.out.println("My method implementation"); } } 

接口是包含抽象方法的类,它不能创build任何对象。由于接口不能创build对象,也不能创build一个纯类,所以没有值得实现它。