5

C++ では多くのクラスを拡張できますが、クラスが 1 つのクラスしか拡張できないという Java でのこの設計の利点は何でしょうか? インターフェイスは純粋な種類のクラス(実際には抽象クラス)なので、クラス拡張のようにインターフェイスの実装数を制限しないのはなぜですか?

4

1 に答える 1

21

1 つの基本クラスのみを拡張できることは、ひし形の問題を解決する 1 つの方法です。これは、クラスが同じメソッドを実装する 2 つの基本クラスを拡張するときに発生する問題です。

A.java:

public class A {
    public int getValue() { return 0; }
}

B.java:

public class B {
    public int getValue() { return 1; }
}

C.java:

public class C extends A, B {
    public int doStuff() { 
        return super.getValue(); // Which superclass method is called?
    }
}

インターフェイスは実装を持つことができないため、これと同じ問題は発生しません。2 つのインターフェイスに同一のシグネチャを持つメソッドが含まれている場合、メソッドは事実上 1 つだけであり、競合は発生しません。

于 2013-09-18T03:34:07.960 に答える