jdk1.8中新增加了default关键字,就是在接口中可以增加默认实现.
因为改动接口所有的实现类都要改动,所以增加了default关键字后不需要修改其他类,默认给所有实现类增加了方法.
一个类实现了两个接口,这两个接口都有默认的default关键字,那么程序会先执行哪一个呢?
public interface A { default void hello() { System.out.println("Hello from A"); } }
public interface B extends A{ default void hello() { System.out.println("Hello from B"); } }
public class C implements B,A{ public static void main(String[] args) { new C().hello();//Hello from B } }
答案是先执行B
因为这里有三个规则
1.类中的方法优先级最高. 类或者父类声明的方法的优先级高于任何声明为默认方法的优先级.
2.子接口优先级最高.
3. 1 2 无法判断的情况下,只能显示覆盖.
因为这里B继承了A,所以B的优先级比A高.
原文:https://www.cnblogs.com/lishuaiqi/p/12088943.html