また、特定のメソッドに応答する必要があるクラスによってインターフェイスを共有する必要があるというadamalexの応答にも同意します。
クラスが同様の機能を持っているが、祖先の関係で互いに直接関連していない場合、インターフェイスは、2つの間で機能を複製することなくその機能をクラスに追加するための良い方法です。(または、微妙な違いだけで複数の実装があります。)
車の例えを使用している間、具体的な例です。次のクラスがあるとしましょう。
Car -> Ford -> Escape -> EscapeHybrid
Car -> Toyota -> Corolla -> CorollaHybrid
車は持っているwheels
し、できるDrive()
し、Steer()
。したがって、これらのメソッドはCar
クラスに存在する必要があります。(おそらく、Car
クラスは抽象クラスになります。)
線を下ると、との違いがわかりますFord
(Toyota
おそらく、車のエンブレムのタイプの違いとして実装され、おそらく抽象クラスです)。
そして最後に、完全に自動車として実装されたクラスであるEscape
とCorolla
クラスがあります。
さて、どうすればハイブリッド車を作ることができるでしょうか?
メソッドを追加するサブクラスと、メソッドEscape
を持つサブクラスを作成できます。メソッドは基本的に同じことをしますが、それでも異なるメソッドがあります。うん。それよりもうまくやれるようです。EscapeHybrid
FordsHybridDrive()
Corolla
CorollaHybrid
ToyotasHybridDrive()
ハイブリッドには方法があるとしましょうHybridDrive()
。(完璧な世界で)2つの異なるタイプのハイブリッドを作成したくないのでIHybrid
、メソッドを持つインターフェースを作成できますHybridDrive()
。
したがって、またはクラスを作成する場合は、EscapeHybrid
CorollaHybrid
インターフェイスを実装するIHybrid
だけです。
実際の例として、Javaを見てみましょう。オブジェクトと別のオブジェクトの比較を実行できるクラスは、Comparable
インターフェースを実装します。名前が示すように、インターフェースは比較可能なクラス用である必要があるため、 「Comparable」という名前になります。
興味深いことに、Javaチュートリアルのインターフェイスレッスンでは車の例が使用されています。