2013-01-23 655 views
12
interface A { 

    public void doSomething(); 
} 

interface B extends A { 

    public void doSomethingElse(); 
} 

public class AClass implements A, B { 

    public void doSomething() {} 

    public void doSomethingElse() {} 

} 

为什么的Java允许这样的声明?通过实现SubInterface(B)可以实现相同的事情时,实现两个接口的用途是什么?在一个类中实现超级子接口都(A类实现了超接口,子接口)

+3

不允许它会得到什么? –

+0

可能的重复[为什么父类和子类都实现相同的接口?](http://stackoverflow.com/questions/5668429/why-would-both-a-parent-and-child-class-implement-所述-相同接口) –

回答

3

我认为“为什么”这个问题只能由Java设计人员来解答。

其中一个原因可能是它允许在不破坏已经实现两者的任何现有类的情况下对​​至B进行加装。

使用此构造的另一个原因可能是让AClass的最终用户立即明白该类实现了AB。这在Redundant implementation of List interface in ArrayList.java

2

这只是一个方便。跟踪接口结构是什么可能很困难,而且对于程序员必须全部跟踪它而言是很繁琐的。另外,不允许冗余接口不好:多次实现接口可能是不可避免的。例如:

interface A { ... } 
interface B extends A { ... } 
interface C extends A { ... } 
public class AClass implements B, C { ... } 

在这种情况下,A被“执行”两次,但这没有问题。它只是意味着AClass必须实现ABC中声明的每种方法。

0

中讨论1)为什么不实施A两次是多余的,但不会导致混淆。

2)接口B可能会改变(并且可能不再延伸A)。 AClass仍然会执行AB

1

有了这个是一个错误,加碱接口到现有的公共接口将是一个重大更改。
(如果客户端代码有一个类已经实现了这两个接口)