如何从界面i1默认方法disp1()调用interface i2默认方法disp2()。是否可以?
interface i1 {
default void disp1() { System.out.println("Super interface"); }
}
interface i2 extends i1 {
default void disp2() { System.out.println("Sub interface"); }
}
答案 0 :(得分:0)
通过施放。
E.g。如果你有一个实现i2
的类,那么i1
也是如此:
public class C implements i2 {
public static void main(String[] args) {
C c = new C();
c.disp1();
}
}
如果安全,disp1()
方法可以将自己投射为i2
:
interface i1 {
default void disp1() {
System.out.println("Super interface");
if (this instanceof i2)
((i2) this).disp2();
}
}
这将输出两行:
Super interface
Sub interface
或者,作为一种更加面向对象的方法,您可以将disp2()
方法添加到i1
吗?然后i2
会覆盖它:
interface i1 {
default void disp1() {
System.out.println("Super interface");
((i2) this).disp2();
}
default void disp2() {
}
}