[解決済み] いつ使うか。Java 8+のインターフェイスのデフォルトメソッドと、抽象的なメソッドの比較
質問
Java 8 では、以下のようなインターフェースのメソッドをデフォルトで実装することができます。 デフォルトメソッド .
私は、このような
interface default method
の代わりに
abstract class
との
abstract method(s)
).
では、どのような場合にデフォルトメソッドを持つインターフェースを使用し、どのような場合に抽象クラス(抽象メソッドを持つ)を使用すべきなのでしょうか?そのような場合でも、抽象クラスは有用なのでしょうか?
どうすれば解決するの?
抽象クラスにはデフォルトのメソッド実装(private stateなど)以外にもいろいろありますが、Java 8の時点では、どちらかを選択できるときは、ディフェンダー(別名。
default
) のメソッドをインターフェイスに追加しました。
デフォルトメソッドの制約として、他のインターフェイスメソッドの呼び出しという形でしか実装できず、特定の実装の状態を参照することができないことが挙げられます。そのため、主な使用例は上位のメソッドや利便性の高いメソッドとなります。
この新機能の良いところは、以前は便利なメソッドに抽象クラスを使わざるを得ず、実装者が単一継承に制約されていたのが、インターフェースだけで本当にすっきりした設計ができ、プログラマに最低限の実装作業を強いることができるようになったことです。
を導入した当初の動機は
default
メソッドをJava 8に追加したのは、既存の実装を壊すことなく、ラムダ指向のメソッドでCollections Frameworkインターフェースを拡張するためでした。これは、公開ライブラリの作者に関連することではありますが、あなたのプロジェクトでも同じ機能が役に立つかもしれません。新しい利便性を追加するための一元的な場所を手に入れ、残りの型階層がどのように見えるかに依存する必要はありません。
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み] インターフェースとベースクラス
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み] Java 8のインターフェイスメソッドで "final "が使えないのはなぜですか?
-
[解決済み】Javaでデフォルトのメソッドを明示的に呼び出す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
IllegalArgumentException この例外を解決する方法
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
プロローグでのコンテンツは禁止されています
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
javaでよく使われる英単語
-
java 例外。Javaツールの初期化
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。