java解决默认方法冲突的策略

java解决默认方法冲突

出现默认方法冲突的原因,如果先在一个接口中将一个方法定义为默认方法,之后又在另一个接口中定义了同样的方法,就会产生二义性。java解决二义性的规则如下:

1)超类优先:如果超类提供了一个具体方法,同名且有相同参数参数类型的默认方法会被忽略。

2)接口冲突:如果一个超类接口提供了一个默认方法,另一个接口也提供了一个同名且参数类型(无论是否是默认参数)相同的方法。必须覆盖这个方法来解决冲突。

假设接口A和B都有默认方法b()

public interface A {
    default void b() {
        System.out.println("a");

    }
}
public interface B {
     default void b() {
         System.out.println("b");
     }
}

类C同时实现了这两个接口,然而这两个接口有同样的默认方法b(),这时候就会出现接口冲突,必须要求我们在C中提供一个b()方法解决这种冲突。

public class C implements A, B {
    @Override
    public void b() {
        A.super.b();
    }

    public static void main(String[] args) {
        C c = new C();
        c.b();
    }
}

3)类优先:一个类扩展了一个超类,同时实现了一个接口,并从超类和接口同时继承了相同的方法。在这种情况只是考虑超类的方法,接口中的所有默认方法会被忽略。

千万不要让一个默认方法重新定义Object类中的某个方法。因为类优先的原则,接口中的方法一定会被忽略的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值