「Javaに多重継承がない理由」に関してこれまでに見たすべての答えには、「複雑さを軽減する」というより具体的または詳細な答えが1つしかありませんが、複雑さを軽減する方法を定義した人は誰もいません。違いがあります。それは同じことではありませんか?インターフェースを実装し、クラスを拡張しない場合の違いは何ですか?ダイヤモンドの問題で答えた人もいますが、インターフェースはダイヤモンドの問題を引き起こす可能性もあります。
2 に答える
6
インターフェイスとクラス間の多重継承の違いは、実装を継承する必要がある場合です。複数のパスを介してメソッドインターフェイスを継承する場合、実装クラスは継承されたメソッドを実装する必要があると言えます。複数のクラスから継承する場合は、いくつかの実装のどれを選択するかを決定する必要があります。これにより、C ++で多重継承が実装される方法を調べるとわかるように、言語の複雑さが大幅に増加します。
これがイラストです:
public class Base {
public void foo() {System.out.println("base");}
}
public class A extends Base {
public void foo() {System.out.println("a");}
}
public class B extends Base {
public void foo() {System.out.println("b");}
}
public class AB extends A, B /* imagine that it's a possibility */{
}
これを行うとどうなりますか?
AB ab = new AB();
ab.foo();
インターフェイスの継承ではAB
、実装する必要がありますfoo
; 実装を継承する場合、言語はそれを自分で決定するか、指定する方法を提供する必要があります。いずれにせよ、複雑さは増していきます。
于 2012-07-31T02:34:00.123 に答える
2
インターフェイスにはコードが付属していません。実装する必要があるメソッドのセットのみです。
クラスにはコードが付属しています。クラスで菱形継承問題が発生すると、同じ関数の2つの実装が発生し、同じ変数を参照する可能性があります。
インターフェイスの場合、実装は1つだけですが、インターフェイスはさまざまな場所から取得できます。
于 2012-07-31T02:32:30.690 に答える