\r\n\r\n
抽象クラスとインターフェースの大きな違いは、Javaのインターフェースの処理は基本的に抽象的であり、アプリケーションを持つことができない点である。大雑把に言うと、インターフェースは実はコントラクトで、インターフェースというと本体のないメソッドに適用される、ただのパターンです。抽象クラスは、基本的に使用料が高いクラスです。抽象クラスとインターフェースは全く別の概念で、2つの異なるものですが、時にはその実装が非常に似ていることがあります。
抽象クラスはプログラマにとって完全に暗黙の了解になっているわけではありません。抽象クラスは、1つまたは複数の抽象メソッドを持つことができます。クラスのグルーピングやランキングをモデリングするのに便利で、この処理を行うと、プログラマは要件を見て何を作ればいいのかがわかるようになる。抽象クラスは、いくつかの部分が欠けているため、完全に依存することはできません。この議論の背景には、抽象クラスはメソッドのタイトルはあるがボディがないにもかかわらず、厳密にはオブジェクト指向であるという主旨がある。抽象クラスというと、どちらも他のクラスを取得したり継承したりする傾向があるため、両者の間には強い結びつきがあります。
逆に言えば、インターフェースについて語るとき、インターフェースそのものとそれを表すクラスとの関係やコミュニケーションは、抽象クラスほど強くない。 Javaクラスは多くのインターフェースを実装できるが、一つの抽象クラスを継承することができる。つまり、多くのインタラクションを一度にインプリメントしたいときには、このインターフェイスの出番というわけですね。それ以上は、たとえ現時点ではAPIを変えたくないとしても、インターフェイスが最善の策です。インターフェースは、実際には2つの異なるオブジェクトの間の契約です。要するに、機能を軸にしたインターフェースなのです。