Why an interface can not implement another interface?
我的意思是:
1 2 3 4 5 | interface B {...} interface A extends B {...} // allowed interface A implements B {...} // not allowed |
我在谷歌上找到了这个:
implements denotes defining an implementation for the methods of an interface. However interfaces have no implementation so that's not possible.
然而,接口是100%抽象类,抽象类可以实现接口(100%抽象类),而不实现其方法。当它定义为"接口"时,有什么问题?
详细地说,
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
100%
此外,100%抽象类中的成员变量可以具有任何访问限定符,在接口中,它们隐式地是
对于接口,可以说一个接口应该具有与另一个相同的行为,甚至没有实际的实现。这就是为什么它对一个与
另一方面,请记住,即使一个
概念上有两个"域"类和接口。在这些域中,您总是在扩展,只有一个类实现一个接口,这有点"跨越边界"。所以基本上,接口的"扩展"反映了类的行为。至少我认为这是背后的逻辑。似乎并不是每个人都同意这种逻辑(我发现这有点做作自己),事实上,没有任何技术上的理由有两个不同的关键字。
However, interface is 100% abstract class and abstract class can
implements interface(100% abstract class) without implement its
methods. What is the problem when it is defining as"interface" ?
这只是惯例问题。Java语言的作者们认为,"扩展"是描述这种关系的最好方式,所以这就是我们所使用的。
一般来说,即使接口是"100%抽象类",我们也不会这样想。我们通常认为接口是实现某些关键方法的承诺,而不是从中派生的类。因此,我们倾向于对接口使用不同的语言,而不是对类使用不同的语言。
正如其他人所说,选择"扩展"而不是"工具"是有充分理由的。
希望这将有助于你有点我学到的OOP(核心Java)在我的大学。
implements表示定义接口方法的实现。然而,接口没有实现,所以这是不可能的。但是,一个接口可以扩展另一个接口,这意味着它可以添加更多的方法并继承其类型。
下面是一个例子,这是我的理解,也是我在OOPS中学到的。
1 2 3 4 5 6 7 | interface ParentInterface{ void myMethod(); } interface SubInterface extends ParentInterface{ void anotherMethod(); } |
记住一件事:一个接口只能扩展另一个接口,如果你想在某个类上定义它的函数,那么在下面实现的示例中,只有一个接口
1 2 3 4 5 6 | public interface Dog { public boolean Barks(); public boolean isGoldenRetriever(); } |
现在,如果一个类要实现这个接口,它将是这样的:
1 2 3 4 5 6 7 8 9 10 11 | public class SomeClass implements Dog { public boolean Barks{ // method definition here } public boolean isGoldenRetriever{ // method definition here } } |
如果一个抽象类有一些抽象函数define和declare,而你想要定义那些函数,或者你可以说实现那些函数,那么你应该扩展这个类,因为抽象类只能被扩展。下面是示例。
1 2 3 4 | public abstract class MyAbstractClass { public abstract void abstractMethod(); } |
下面是MyAbstractClass的一个子类示例:
1 2 3 4 5 6 | public class MySubClass extends MyAbstractClass { public void abstractMethod() { System.out.println("My method implementation"); } } |
Interface是包含无法创建任何对象的抽象方法的类。由于Interface无法创建对象,而且它不是纯类,因此不值得实现它。