17
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)を実装することで同じことが達成できる場合、両方のインターフェイスを実装することの使用は何ですか?

4

5 に答える 5

6

「なぜ」という質問には、Javaの設計者しか答えられないと思います。

理由の1つは、両方を実装している既存のクラスを壊すことなくextends A、後付けできることである可能性があります。B

この構成を使用するもう1つの理由はAClass、クラスがとの両方Aを実装していることをエンドユーザーにすぐに明確にするためBです。これについては、ArrayList.javaのListインターフェースの冗長実装で説明されています。

于 2013-01-23T16:06:11.877 に答える
2

これは単に便利です。インターフェイス構造が何であるかを追跡することは困難な場合があり、プログラマーがすべてを追跡しなければならないのは面倒です。さらに、冗長なインターフェースを許可しないことから得られる利益はありません。インターフェースを複数回実装することは避けられない場合があります。例えば:

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

この場合、Aは2回「実装」されますが、問題ありません。これは単に、、、、およびで宣言AClassされた各メソッドを実装する必要があることを意味します。ABC

于 2013-01-23T16:04:54.437 に答える
2

これがエラーだった場合、基本インターフェイスを既存のパブリック インターフェイスに追加すると、重大な変更になります。
(クライアント コードに両方のインターフェイスを既に実装しているクラスがある場合)

于 2013-01-23T16:14:11.173 に答える
1

1)Aを2回実装しないのは冗長ですが、混乱を招くことはありません。

2)インターフェースBが変更される可能性があります(拡張されなくなる可能性がありますA)。 AClassまだ実装Aし、B

于 2013-01-23T16:06:24.013 に答える