web-dev-qa-db-ja.com

インターフェースが実装する代わりにインターフェースを拡張するのはなぜですか?

Java私がインターフェイスAを持っていると仮定します:

public interface A {
    // foo
}

私はインターフェースBも持っています:

public interface B extends A {
    // foo + bar
}

なぜインターフェースB extendインターフェースAであり、implementインターフェースAではないのですか?

B 実装 Aの場合、もっと意味がありませんか?

言語デザイナーがWord extendをここで使用することを選択したのはなぜですか?私が見逃している微妙な点はありますか?

3

インターフェースは契約です。何も実装していません(適切に使用される デフォルトのメソッド は小さな例外です)。

とにかく、あるインターフェースが別のインターフェースを「実装」するとはどういう意味ですか?スーパーインターフェイスの一部またはすべてのメソッドのメソッド本体が必要であり、クラスにする必要があります。

18
user22815

インターフェースの実装は、別のインターフェースでは作成できない最終性を意味します-その性質上、インターフェースは不完全であることを意図しています。

別のインターフェースでインターフェースを拡張する唯一の理由は、最初のインターフェースのデフォルトを大幅に変更する必要がある場合であり、元のインターフェースの構造は維持したままです。

例として、基本的な野菜カウントインターフェイスがある場合、それを実装して特定の種類の野菜をカウントできます。しかし、異なるタイプのBeanを区別できるようにインターフェースを変更したい場合は、最初にそれを拡張してから、各タイプのBeanに実装する必要があります。これらの最終的なクラスは、Beanカウンターと野菜カウンターの両方を実装します。

1
Zibbobz

extending行動記述の範囲を広げると考え、implementationを具体的な行動と考えます。

インターフェースがあるとしましょうquacking。これはカエルだけでなくアヒルにも当てはまります。この一般的なインターフェイスをswimmingおよびflyingに拡張できます。これは、アヒルにのみ適用されます。 howアヒルやカエルが泳ぐメカニズムはimplementationです。

@スノーマンがすでに述べたように:デフォルトのメソッドはこの概念の例外です。

0
Thomas Junk