重複の可能性:
Java インターフェイス?
私はJavaの最新ではありませんが、インターフェイスによって解決される目的が正確に何であるかという日付まで理解できなかったことが1つありますか? 多重継承をJavaでアタッチするために使用できることは知っていますが、それは魂の理由ではありません。また、インターフェースのその他の目的のほとんどは、抽象クラスによって実現できます。本でさえ十分な答えを与えていません。
重複の可能性:
Java インターフェイス?
私はJavaの最新ではありませんが、インターフェイスによって解決される目的が正確に何であるかという日付まで理解できなかったことが1つありますか? 多重継承をJavaでアタッチするために使用できることは知っていますが、それは魂の理由ではありません。また、インターフェースのその他の目的のほとんどは、抽象クラスによって実現できます。本でさえ十分な答えを与えていません。
インターフェイスは、クラスの多重継承を提供しません。インターフェイスは他の複数のインターフェイスを拡張できますが。
インターフェイスはコントラクトに似ています。たとえば、あなたは人間というオブジェクトのクラスです。次に、すべての Human オブジェクトに一般的ではない、複数のコントラクトを実現します。携帯料金の支払い、妻の夕食作りなど。
インターフェイスは、オブジェクトが何を行うように契約されているかを伝えるだけです。クラスがそれを定義するのと同じように。
それが役立つことを願っています。
Javaで多重継承をアタッチするために使用できることは知っていますが、それは魂の理由ではありません
複数のインターフェイスを継承できるという事実が、あなたにとって本当に重要な解決策ではないのはなぜですか、あなたは説明しません。
この非常に重要な事実(これは、Java が にダイヤモンドの問題が存在しないようにするのに役立ちますC++
)に加えて、大したことではないと考えていますが、オブジェクト間の異なる種類の関係もモデル化します。クラスは、関係をモデル化
するために使用されます。インターフェースを使用して、構成をキャプチャする関係をモデル化し、さらに、他の方法では互いに無関係なクラス間で共通の機能を組み合わせることができます。 abstract
is-a
has-a
インターフェイスを定義するType
には、最適な候補です。4-Classes And Interfaces
から章を読んでくださいEffective Java
。
インターフェイスを使用するための小さな例を示します。
私は、従業員の給与を加算して従業員に昇給を与える
と 関数Company
を含むクラスを持っています。ArrayList<Employee> employees
giveRaise()
ではなく、3Employee
つのクラスManager
がSalesPerson
あり、それらはすべて昇給しますが、それぞれが異なります。Developer
Employee という名前のスーパークラスを作成できると考えていますが、同じメソッド GiveRaise() を作成したくなく、giveRaise() のデフォルトの処理を行いたくありません。
したがって、(開発者が新しいクラスを作成する場合のように) 継承するクラスを作成するEmployee
たびに、関数 giveRaise を実装して定義する必要があります。
ここでインターフェイスが役立ちます。もちろん、抽象クラスを使用できます。ただし、インターフェイスを使用すると、別のクラスから継承できます。
これは一般的にインターフェイスの最大の利点であるため、プログラムの一部をより自律的に開発できます。これは、インターフェイスを介して、実装する必要があるものと、そこにあると信頼できるものに基づいているためです。 (プログラムの他の部分で)使用します。