0

私のアプリケーションにはクラスがあり、それを class と呼びましょうA。4 つのクラスを 、 、 と呼びBCこのDクラスEから拡張します。これら 4 つのクラスにはそれぞれ、機能が同じであるインターフェイスがあります。

このインターフェイスをクラスに配置したかどうかを知りたいのですAが、これらのすべてのクラスがアクセスできます。私は正しいですか?

Gこのインターフェイスを実装している別のクラスがあります。このインターフェイスを実装すると、これら 4 つのライブラリに同時に適用されますか?

更新 詳細を説明しましょう。私は4つのクラスを持っています。各クラスには、このクラスがインターネットに接続したときにフラグを設定するメソッドがあります。このような。

public class ClassB extends {

    public interface OnConnectingToServer {
        public void onGettingDataFromServer(boolean flag);
    }

    public ClassB () {
        if(I'm_downloading_from_internet)
                OnConnectingToServer.onGettingDataFromServer(true);
    }
}

「B」、「C」、「D」、「E」クラスでこの状況があります。クラス「G」は、このインターフェースを実装します。したがって、各インターフェイスを各クラスに配置したい場合は、「G」クラスでも4つのインターフェイスを実装する4つの異なる名前を割り当てる必要があります。この方法は良くないと思います。

4 つの同じインターフェイスを実装する代わりに、1 つのインターフェイスだけを実装する方法を探しています。したがって、1 つのクラスまたは 4 つのクラスすべてによってインターフェイスをトリガーするかに関係なく、1 つの実装のみが行われます。

より明確にすることを願っています。再度、感謝します。

4

4 に答える 4

4

インターフェイス定義をクラスA内に配置しないでください。それを別の最上位タイプにしてから、すべてのクラスを作成してくださいimplements MyInterface。の場合、サブクラスがインターフェイスを「実装解除」する方法がないため、class B extends A明示的に言う必要はありません。implements MyInterface

于 2012-07-23T08:47:40.813 に答える
2
  • はい、Aインターフェイスを実装すると、そのクラスを拡張するすべてのクラスもそのインターフェイスを実装します。
  • Gインターフェイスを実装させることの意味が完全にはわかりません。それを行うと、拡張するクラスにのみ影響しますG
于 2012-07-23T08:47:56.740 に答える
2

簡単に言えば、はい。Java言語仕様から:

クラスは、1 つまたは複数のインターフェイスを直接実装するように宣言できます。つまり、クラスのインスタンスは、インターフェイスまたはインターフェイスによって指定されたすべての抽象メソッドを実装します。クラスは、直接のスーパークラスと直接のスーパーインターフェースが行うすべてのインターフェースを必然的に実装します。この (複数の) インターフェイス継承により、オブジェクトは実装を共有することなく (複数の) 共通の動作をサポートできます。

(私の強調)

于 2012-07-23T08:48:39.083 に答える
1

クラス A と B でインターフェイス (I と呼ぶ) を実装する場合、C + D は A を拡張し、B、C、D も I インターフェイスを実装します。

これは、次のように記述できることを意味します。

I aInstance = new A();
I bInstance = new B();

だけでなく:

A aInstance = new A();
A bInstance = new B():

論理的には、データ モデルは次のようになるためです。

A is an I 
and  
B is an A 
so this implies:
B is an I

クラス G がインターフェースを実装するが、A を継承しない場合、I で定義された機能をクラス G にも実装する必要があります。

これは、次のように記述できることを意味します。

I aInstance = new A();
I gInstance = new G();

しかし、これは違います (これはコンパイルされません): A gInstance = new G();

インターフェイスはコントラクトにすぎないことを覚えておいてください。インターフェイスを実装するすべてのクラスは、コントラクトを尊重するようにバインドされていますが、実装は継承されません (いずれにしても、実装はインターフェイスに存在できません)。

于 2012-07-23T08:49:39.110 に答える