いくつかのスタックオーバーフローの投稿に基づく:
Java は多重継承をサポートしていません。
私が考えることができるいくつかの回避策があります:
1 つ目は構成です。これら 2 つのアクティビティをフィールドとして使用するクラスを作成します。
2 つ目は、インターフェイスを使用することです。// これは私の質問です
AA クラスのメソッドと BB クラスのメソッドを持つことができるクラスを、インターフェイスまたはコンポジションで構築してみます。私は継承と構成についてよく読んでいますが、私の質問はインターフェースと構成です(どちらが優れていますか)。これらの 2 つのクラス メソッドを 1 つのクラス Preference で使用したい場合は、
class AA{
public int id(){
return 0;
}
}
class BB{
public String name(){
return "0";
}
}
明らかに、Java は多重継承をサポートしていないため、インターフェースまたは構成のいずれかを使用する必要があります。
インターフェース:
まず、次の 2 つのクラスに対応するインターフェイスを構築します。
interface AAInterface{
public int id();
}
interface BBInterface{
public String name();
}
次に、これら 2 つのインターフェイスを実装する Preference クラスを構築し、そのクラス内で 2 つのクラス オブジェクトを宣言します。
class Preference implements AAInterface, BBInterface{
AA aa;
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}
構成: メソッドを使用するために、2 つのクラス オブジェクトに対応する 2 つのフィールドを持つクラスを直接構築します。
class Preference{
AA aa;
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}
その結果、Preference クラスでは、他のインターフェースや合成メソッドを利用することで、AA クラスや BB クラスから派生した id() メソッドや name() メソッドを利用できるようになりました。
質問: 構成ははるかにシンプルで優れているのに、なぜインターフェイスを使用する必要があるのですか? コンポジションの代わりにインターフェイスを使用する必要がある理由はありますか? 別の言い方をすれば、Java インターフェイスを使用して 1 つのクラスで 2 つのクラス メソッドを取得する方法は、私のやり方で正しいのでしょうか?