default methodはextendsによりoverrideされる
interface A {
default void method() {
System.out.println("aaaa");
}
}
interface B extends A {
}
public class Outer implements B {
@Override
public void method() {
System.out.println("aaaa2");
B.super.method();
}
public static void main(String[] args) {
new Outer().method();
}
}
aaaa2
aaaa
interfaceがextendsするときも利用可能
default methodは、extendsしたinterfaceのdefault methodをoverrideするときにだけ参照できる模様。
Outer extends Bのため、B.super.method()はokだが、A.super.method()はng
interface A {
default void method() {
System.out.println("aaaaA");
}
}
interface B extends A {
@Override
default void method() {
System.out.println("aaaaB");
A.super.method();
}
}
public class Outer implements B {
@Override
public void method() {
System.out.println("aaaaOuter");
B.super.method();
}
public static void main(String[] args) {
new Outer().method();
}
}
aaaaOuter
aaaaB
aaaaA