Java8 为什么在接口中引入default方法,以及default方法的使用

Java8 为什么在接口中引入 default 方法

Java8之前,如果需要在一个已有的接口中添加一个方法,那么所有这个接口的实现类也都必须同时实现这个方法,否则程序将无法正常编译运行。
为了解决这一问题,Java8在接口中引入了 default 方法。

default 方法介绍

default 方法也被称之为守护方法(defender method)或者虚拟扩展方法(virtual extension method)。可以在接口中包含一些默认的包含方法体的方法,从而使得接口在进行扩展的时候,不会破坏它的实现类。

如何使用

接口中定义default方法

使用default关键字在接口中定义default方法

public interface Car {
    
    default boolean canFly(){
        return false;
    }
}

实现类不实现 default 方法

毕竟当前的汽车都不能飞的嘛,所以基本上实现类都可以不用管这个default方法。

public class MyCar implements Car {
    
    public static void main(String[] args) {
        MyCar myCar = new MyCar();
        System.out.println("我的车会飞吗? --> " + myCar.canFly());
    }
}

运行结果:调用接口中定义好的default方法。

我的车会飞吗? --> false

实现类实现 default 方法

假如哪一天有了可以飞的汽车,那么在实现类中实现这个default方法即可。

public class MyFlyCar implements Car {

    @Override
    public boolean canFly() {
        return true;
    }

    public static void main(String[] args) {
        MyFlyCar myCar = new MyFlyCar();
        System.out.println("我的车会飞吗? --> " + myCar.canFly());
    }
}

运行结果:调用实现类中的canFly方法。

我的车会飞吗? --> true

同时实现具有相同default方法的两个接口会怎样?

编译报错,因为编译器不知道该使用哪个接口中的default方法,它们的优先级是一样的。解决方法是在实现类中实现该default方法,像MyFlyCar那样。

在JDK中的使用

  1. java.util.Collection — 用于支持Stream的使用。
  2. java.lang.Iterable — 用于支持函数式编程。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i余数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值