なぜインタフェースを使うのですか?



インタフェースとは


インタフェースは要するに抽象クラスである.抽象クラスのように抽象メソッドを持つが,抽象レベルは抽象クラスよりも高いため,抽象クラスとは異なり,抽象メソッドと定数のみをメンバーとする.
抽象クラスを部分的に完了した未完了設計図と呼ぶと,インタフェースは下図のみを描画する基本設計図と呼ぶことができる.
inerface MyInterface {
	public static final int number = 0;
    public abstract method();
}
このように,インタフェース内のすべてのメンバー変数はpublic static finalであり,すべての方法はpublic abstractである.
このように全体的なフレームワークを形成した後,実際の実装クラスにメソッドコンテンツ部分を埋め込んで実現する.

では、直接実装すればいいのに、なぜサービスインタフェースを作成したり、実装クラスを個別に作成したりするのが面倒なのでしょうか。


開発時間を短縮


インタフェースとインプリメンテーションクラスが別々に使用されると、インタフェースを作成するだけで、このフレームワークを使用してプログラムを記述できます.また,一方が実装クラスを作成しながら他の開発を行うことができる.

標準化可能


先ほどからずっと「フレームワーク」という言葉を使っていますが、このようにインタフェースにフレームワークを設定して開発を行うと、複数の開発者が作業時にも1つの統一されたフレームワーク内でその内容を実現して開発を行うので、構造化された作業を行うことができます.

関係のないクラスに関係を築くことができます


相互継承(extends)関係でも祖先クラスの関係でもないクラスにインタフェースを共通に実装させると、関係を確立できます.

独立したプログラミングが可能


クラスの宣言(インタフェース>サービス)とインプリメンテーション(クラス>サービスImpl)を分離することで、独立したプログラミングが可能になります.すべてのクラスが直接関係である場合、クラスを変更するたびに、すべての直接関係が確立されたクラスを変更する必要があります.ただし、宣言および実装時に間接関係に変更すると、クラスを変更しても他のクラスには影響しません.

JDK1.8から始まる違い


Defaultメソッドを追加可能


既存のpublic abstract抽象メソッドのみからデフォルトメソッド(default)を追加できるように拡張します.

デフォルトメソッドが追加されたのはなぜですか?


この点はずっと疑問で、javaの定式を読み直した後に発見して、これは原因があります.さっきインタフェースはフレームワークと言いましたが、理想的には、このフレームワークは最初から完璧に設計されていて、インタフェースを修正せず、実装クラスだけを修正してプログラムを書くほうがいいですが、現実には、いつかフレームワークを修正する必要があることが多いです.
この場合,抽象メソッドをインタフェースに追加すると非常に大きなことが起こる.このインタフェースを実装するすべてのクラスで追加したメソッドの内容を実装する必要があるためです.
このような状況に対応するために増えたのがディボルト・メイサーだ.
(アクセス制御者は他の人と同じpublic)
デフォルトのメソッドは抽象メソッドではないため、追加後に実装インタフェースのクラスを変更する必要はありません.ただし、エラー・メソッドの名前が既存のメソッドの名前と重複している場合は、次のルールを使用して解決できます.
  • 複数のインタフェースのエラーメソッド間の競合:実装クラスでエラーメソッド
  • を上書きする
  • メソッドと祖先クラスメソッドとの競合:祖先クラスメソッドを継承し、祖先クラスメソッド
  • を無視する

    追加可能なStaticメソッド


    実際,静的メソッドはインスタンスとは独立したメソッドであるため,インタフェースに追加できない理由はない.(つまり、静的メソッドは特定のオブジェクトに属しません.)
    インタフェースは抽象メソッドのルールしか持たないため,代表的なCollectionsインタフェースの関連静的メソッドがCollectionsクラスに入った.
    いずれにしても、1.8以降は、共通の静的メソッドを宣言することができます.