关于java8接口中默认方法的使用


java8在接口中引入了默认方法,通过在方法前加上default关键字就可以在接口中写方法的默认实现,有点类似于C++中的多继承,但是当多个接口或父类中有相同签名的方法时,会引发一些问题,经过实验得出如下结论:

1.当继承的父类和实现的接口中有相同签名的方法时,优先使用父类的方法。

2.当接口的父接口中也有同样的默认方法时,就近原则调用子接口的方法。

3.当实现的多个接口中有相同签名的方法时,必须在实现类中通过重写方法解决冲突问题,否者无法通过编译,在重写的方法中可以通过 接口名.super.方法名(); 的方式显示调用需要的方法。

例子如下:

有一个类和两个接口

public class A {
    public void methods(){
        System.out.println("Object A methods");
    }
}
public interface B {
    default void methods(){
        System.out.println("interface B methods");
    }
}
public interface C {
    default void methods(){
        System.out.println("interface C methods");
    }
}
下面通过一个类继承自A并且实现B接口:

public class Test extends A implements B{
    public static void main(String[] args){
        System.out.println("HelloWord!");
        Test test = new Test();
        test.methods();
    }
}
根据就近原则test将调用父类A的方法并输出"Object A methods"

如果一个类同时实现了接口B和C:

public class Test1 implements B, C {

    public static void main(String[] args){
        System.out.println("HelloWord!");  Test1 test1 = new Test();  test1.methods();  }

    @Override  public void methods() {
        B.super.methods();
    }
}
通过使用Override重写的方式解决冲突问题,并且在Override方法中通过B.super.methods();的方式显示指定调用B接口中methods方法,最终输出结果为:“interface B methods”


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM