关于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”
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值