0

Javaインターフェースは、それらのクラスがそれらを実装するときに、より多くのクラスで使用されるメソッドを宣言するために使用されることを理解しています。例えば:

public interface MyInterface{

   void myVoidMethod();  
   Bool myBoolMethod(int x);  
   String myStringMethod(String a,String b);

}

したがって、私が理解していることから、これは主に、いくつかのメソッドがクラスで宣言されていることを確認するために使用され、それらのメソッドは通常、より一般的なものであり、より多くのクラスに適用される可能性があります。しかし、すでにいくつかのコードが含まれている必要があり、より多くのクラスに適用する必要があるメソッドについてはどうでしょうか。
たとえば、次のようにmyBoolMethod定義する必要があるクラスが多数ある場合はどうなりますか

Bool myBoolMethod(int x){
return x?0:1;}

(簡単な例を挙げましたが、明らかにもっと複雑な方法を使用する必要があります)。「コードインジェクション」について聞いたことがあり、それに関連していると確信していますが、さらに先に進む方法がわかりません。また、同じコードを別の場所で書き直さないようにする方法もわかりません。

4

5 に答える 5

1

java 7では、メソッドのデフォルトの実装を提供するために抽象クラスを使用する必要があります。インターフェイスでオブジェクトの動作を定義する方法はありません。

java 8を使用すると、インターフェース内のメソッドのデフォルトの実装を提供できます。

于 2013-02-27T12:33:57.920 に答える
1

クラスにすでに実装されている特定のメソッドがあることを確認したい場合は、抽象クラスを使用する必要があります。

インターフェイスは単なるコントラクトであり、クラスがそのインターフェイスの実装に同意したときに、それらのメソッドの実装を提供する必要があることを規定しています。これは、オブジェクトの直接メソッドではなく、インターフェイスを介してオブジェクトにクラスを参照させることにより、コード内の緩い結合を促進したい場合に役立ちます。

于 2013-02-27T12:34:13.930 に答える
1

あなたは抽象クラスと継承を探しています。super継承とキーワード の使用の詳細については、 http: //docs.oracle.com/javase/tutorial/java/IandI/super.htmlを参照してください。

于 2013-02-27T12:35:11.477 に答える
1

必ずしも。テストにも使用されます。インターフェイスがない場合、テスト目的でカスタム実装を提供することはできません。もう1つの懸念は、「実装ではなくインターフェースへのコード」パラダイムかもしれません。説明させてください:

ArrayListの文字列があるとします。

ArrayList<String> list = new ArrayList<String>();

これをコードで使用しますが、後でLinkedList問題に対してより効率的であるため、が必要になることがわかります。

今、何が起きた?多くの場所でコードをリファクタリングする必要があります。ただし、最初にListインターフェイスを使用した場合は、その実装を気にせずにインターフェイスを渡すことができたため、後でLinkedList代わりに必要であることがわかった場合ArrayListは、1か所で変更する必要があります。

List<String> list = new LinkedList<String>();

クラス間メソッドが必要な場合は、abstractクラスを作成し、で定義されたメソッドのデフォルトの実装を提供できますinterface。オーバーライドしない場合は、すべての実装クラスで共有されます。

于 2013-02-27T12:35:51.980 に答える
1

インターフェースは(実際の経験から言えば)、特定の変数/パラメーターが他のポスターが言及している契約に準拠する必要があることを指定したい場合に便利です。たとえば、注入されるリソース(たとえばデータソース)がありますが、それがたとえばMySQL DB、SQL Server DB、またはダミーのデータソースへの接続であるかどうかをまだ指定したくない場合ライブデータに影響を与えることなく、テストのためだけに使用します。したがって、タイプをインターフェースタイプとして指定すると、実行時に適切な実装タイプのインスタンスが注入されます。興味があれば、インジェクション(CDI)チュートリアルをグーグルで検索できます。

その他の場合は、スーパークラス(抽象的かどうか)を使用したい場合があります。正解は次のとおりです。それは状況によって異なります。特定の状況に最適な選択を行えるようにするには、Java言語の基礎に関する理論と本を読んで(そしてレビューして)ください。

于 2013-02-27T12:45:38.923 に答える