在类中同时实现超级接口和子接口(类 A 实现超级接口、子接口)

2022-09-03 02:41:07
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允许这样的声明?当可以通过实现子接口(B)实现相同的目的时,实现这两个接口有什么用?


答案 1

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

一个原因可能是它允许在不破坏任何已经碰巧实现两者的现有类的情况下进行改造。extends AB

使用此构造的另一个原因可能是立即向最终用户清楚地表明该类同时实现 和 。这在 ArrayList 中 List 接口的冗余实现中进行了讨论.javaAClassAB


答案 2

这只是一种方便。跟踪接口结构可能很困难,并且对于程序员来说,必须跟踪所有内容将是繁重的。此外,不允许冗余接口不会带来任何好处:多次实现一个接口可能是不可避免的。例如:

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

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