1

いくつかのスタックオーバーフローの投稿に基づく:

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 つのクラス メソッドを取得する方法は、私のやり方で正しいのでしょうか?

4

1 に答える 1