[解決済み】Javaでデフォルトのメソッドを明示的に呼び出す
2022-03-28 21:47:36
質問
Java 8の紹介 デフォルトメソッド は、既存の実装を変更することなくインターフェースを拡張する機能を提供します。
あるメソッドがオーバーライドされたり、異なるインターフェイスのデフォルト実装が競合して利用できない場合に、明示的にそのメソッドのデフォルト実装を呼び出すことは可能なのでしょうかね。
interface A {
default void foo() {
System.out.println("A.foo");
}
}
class B implements A {
@Override
public void foo() {
System.out.println("B.foo");
}
public void afoo() {
// how to invoke A.foo() here?
}
}
上記のコードを考慮すると、どのように
A.foo()
をクラスBのメソッドから呼び出すことはできますか?
どのように解決するのですか?
の通りです。
この記事
インターフェイスのデフォルトメソッドにアクセスする場合
A
を使って
A.super.foo();
これは次のように使うことができます(インターフェイスを想定しています
A
と
C
はどちらもデフォルトのメソッド
foo()
)
public class ChildClass implements A, C {
@Override
public void foo() {
//you could completely override the default implementations
doSomethingElse();
//or manage conflicts between the same method foo() in both A and C
A.super.foo();
}
public void bah() {
A.super.foo(); //original foo() from A accessed
C.super.foo(); //original foo() from C accessed
}
}
A
と
C
は、どちらも
.foo()
メソッドを実装し、特定のデフォルトの実装を選択することもできますし、どちらか (あるいは両方) を新しい
foo()
メソッドを使用します。また、同じ構文を使用して、実装クラスの他のメソッドでデフォルトバージョンにアクセスすることもできます。
メソッド呼び出しの構文についての正式な説明は JLSの第15章 .
関連
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] いつ使うか。Java 8+のインターフェイスのデフォルトメソッドと、抽象的なメソッドの比較
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] 警告: コンテキスト初期化中に例外が発生 - 更新の試みはキャンセルされました。
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について
-
[解決済み] .lengthが解決できない、またはフィールドでない