从父接口调用子接口方法

时间:2018-03-14 16:03:06

标签: java methods interface default extends

如何从界面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"); }
}

1 个答案:

答案 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() {

    }
}