2

インターフェイスを実装するクラスを作成し、このクラスのインスタンス化中にインターフェイスでメソッドを使用するかどうかを選択できますか? したがって、インターフェースを使用するオブジェクト A と使用しないオブジェクト B があります。

ありがとう

更新しました:

Professorクラスがあり、このクラスがemployer(rAssist x)抽象メソッドを持つEmployerというインターフェースを実装していると仮定します。

ここで、このインターフェイスを実装する教授クラスから 2 つのオブジェクトをインスタンス化したいと考えています。オブジェクト A - 教授は研究助手を雇用でき、オブジェクト B - 教授は研究助手を雇用できません

4

5 に答える 5

4

インターフェイスを実装するクラスを作成し、このクラスのインスタンス化中にインターフェイスでメソッドを使用するかどうかを選択できますか?

いいえ、クラスCがインターフェースを実装する場合、 のすべてのインスタンスはCインターフェースで宣言されたメソッドを提供します。

あなたができることは次のようなものです

class MyClass implements MyInterface {

    @Override
    void interfaceMethod() {
        System.out.println("Interface method");
    }
}

そして、する

MyClass x = new MyClass();

MyClass y = new MyClass() {
    @Override
    void interfaceMethod() {
        throw new UnsupportedOperationException();
    }
};

実際には、 whilexの使用はサポートしていません。ただし、注意してください...interfaceMethody

  • の使用はコンパイル時y.interfaceMethodに妨げられません。つまり、型システムによって強制されることはありません。

  • このソリューションでは、実際には の (匿名の)サブクラスを作成し、MyClassそのインスタンスを に割り当てていますy

于 2012-07-30T05:21:41.300 に答える
1

クラスAとクラスBに共通のインターフェイスを実装したいが、クラスBのすべてのメソッドを実装したくないということですか?

簡単に言うと、インターフェースは一種のコントラクトであり、それを実装するすべてのクラスはそのコントラクトに従う必要があります。したがって、クラスBにインターフェースを実装させる場合は、クラスBも同じコントラクトに従う必要があります。ただし、メトスを実装したくない場合は、いつでもこれを実行できます。

class ISampleInterface {

  void sampleMethod();

  void optionalMethod();

} 

Class A implements ISampleInterface {

    void sampleMethod() {
      //Your Implementation
    }

    void optionalMethod() {
      //Your Implementation
    }
}



class B implements ISampleInterface {

    void sampleMethod() {
      //Your Implementation
    }

    void optionalMethod() {
      throw new UnsupportedMethodException();
    }
}
于 2012-07-30T05:26:10.003 に答える
0

インターフェイスの考え方は、インターフェイスを実装するクラスの義務を確立することです。が必要な場合は、java.lang.reflect.Methodリフレクションクラスを使用して、実行時にメソッドの可視性を変更できます。ただし、これはクリーンな方法ではありません。

于 2012-07-30T05:24:09.350 に答える
0

1. Javaでは 多重継承が許可されていなかっInterfacesたため、Javaで導入されました。

2.しかし、それDesign Patternに関する限り、以下は用途です。

-implement certain Roles

Dogスーパークラスと見なしますが、PetdogとWilddogをインターフェイスにすることができ、Dogクラスのサブクラスで実装できます。

-の 場合に使用されBehaviors keeps changingます。

クラスDrawingがあり、その中にpaint method()があるとします。これで、paintはストローク、シェーディングなどになります。このような動作をインターフェイスまたは抽象クラスにカプセル化する必要があります。

于 2012-07-30T05:25:17.603 に答える
0

いいえ、それは の要点ではありませんInterface

Interface実装がその署名を実装することを保証する契約です

于 2012-07-30T05:18:49.197 に答える