インターフェイスにデフォルトのメソッドがあるとします。クラスの実装で、デフォルトのメソッド以外に追加のロジックを追加する必要がある場合、メソッド全体をコピーする必要がありますか? デフォルトのメソッドを再利用する可能性はありますか...抽象クラスで行うように
super.method()
// then our stuff...
インターフェイスにデフォルトのメソッドがあるとします。クラスの実装で、デフォルトのメソッド以外に追加のロジックを追加する必要がある場合、メソッド全体をコピーする必要がありますか? デフォルトのメソッドを再利用する可能性はありますか...抽象クラスで行うように
super.method()
// then our stuff...
次のように呼び出すことができます。
interface Test {
public default void method() {
System.out.println("Default method called");
}
}
class TestImpl implements Test {
@Override
public void method() {
Test.super.method();
// Class specific logic here.
}
}
super
このように、インターフェイス名で修飾することにより、呼び出すインターフェイスの既定のメソッドを簡単に決定できます。
class TestImpl implements A, B {
@Override
public void method() {
A.super.method(); // Call interface A method
B.super.method(); // Call interface B method
}
}
これがsuper.method()
うまくいかない理由です。クラスが複数のインターフェースを実装する場合、あいまいな呼び出しになります。