如何调用父接口中的方法

interface FatherInterface{
    default int doStuff(){
        return 42;
    }
}

interface MyInterface extends FatherInterface{
    ...
}
public class IfaceTest   implements  MyInterface{
    public static void main(String[] args) {
        new IfaceTest().go();
    }
    void go(){
        System.out.println("infacce :"+MyInterface.super.doStuff());//希望调用FatherInterface中的doSutff方法,该如何写?
    }
}
阅读 3.5k
5 个回答

父类的接口default的可以直接调用的, 除非你自己覆盖了;
比如List接口里的sort/replaceAll Map接口里的forEach/replaceAll等 在ArrayList里都可以直接用的;

刚想说接口里不可以写方法体的,因为默认修饰符是public abstract,抽象方法。
然后看了下JAVA8 已经可以在接口写方法体了。。活在上世界的人啊。
研究了下,这个设计应该是想取代掉中间抽象类的作用,把方法的默认实现放在接口里,这样实现类如果不重写方法,就直接调用接口中的默认实现了。
这样,你这个调用的时候其实就可以new IfaceTest().doStuff() 就可以了。

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

目前按照这个继承结构来说,做不到你想要的效果。

接口提供默认方法本来就是为了解决一些历史问题,主要是解决底层接口扩展之后,能保证所有实现库在不改动的情况下编译通过。但从业务处理上来说,它并不可靠。所以作为新开发的代码来说,默认方法这东西,能不用尽量不用。方法还是正式的写在类实现里比较好。

参阅:接口默认方法是什么鬼


已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
void go(){
        System.out.println("infacce :"+this.doStuff());
    }
推荐问题
宣传栏