1. ホーム
  2. java

[解決済み] いつ使うか。Java 8+のインターフェイスのデフォルトメソッドと、抽象的なメソッドの比較

2022-03-16 04:46:16

質問

Java 8 では、以下のようなインターフェースのメソッドをデフォルトで実装することができます。 デフォルトメソッド .

私は、このような interface default method の代わりに abstract class との abstract method(s) ).

では、どのような場合にデフォルトメソッドを持つインターフェースを使用し、どのような場合に抽象クラス(抽象メソッドを持つ)を使用すべきなのでしょうか?そのような場合でも、抽象クラスは有用なのでしょうか?

どうすれば解決するの?

抽象クラスにはデフォルトのメソッド実装(private stateなど)以外にもいろいろありますが、Java 8の時点では、どちらかを選択できるときは、ディフェンダー(別名。 default ) のメソッドをインターフェイスに追加しました。

デフォルトメソッドの制約として、他のインターフェイスメソッドの呼び出しという形でしか実装できず、特定の実装の状態を参照することができないことが挙げられます。そのため、主な使用例は上位のメソッドや利便性の高いメソッドとなります。

この新機能の良いところは、以前は便利なメソッドに抽象クラスを使わざるを得ず、実装者が単一継承に制約されていたのが、インターフェースだけで本当にすっきりした設計ができ、プログラマに最低限の実装作業を強いることができるようになったことです。

を導入した当初の動機は default メソッドをJava 8に追加したのは、既存の実装を壊すことなく、ラムダ指向のメソッドでCollections Frameworkインターフェースを拡張するためでした。これは、公開ライブラリの作者に関連することではありますが、あなたのプロジェクトでも同じ機能が役に立つかもしれません。新しい利便性を追加するための一元的な場所を手に入れ、残りの型階層がどのように見えるかに依存する必要はありません。