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