Java8新特性——接口的默认方法(或扩展方法)

今天偶然看到了接口中的default方法,想起之前面试也聊过几次,便了解了一下。

官方文档通道:http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

简单定义:Java 8 允许给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做默认方法(扩展方法

  • 默认:接口中已实现,实现类可直接使用
  • 扩展:实现类还可以重写

 注:默认方法不可以重写Object中的方法,可以重载Object中的方法。

光学不练假把式,接下来应用下试试。

业务场景:一个开发票的功能,由俩个公司来实现,现在要把开出的发票发送给用户,俩个公司的模式基本一样(获取发票号和用户手机,推送发票)

首先确认一下开票功能

public interface InvoiceCompany {
    //开发票
    void makeInvoice();
}


public class InvoiceCompanyA implements InvoiceCompany {

    @Override
    public void makeInvoice() {
        System.out.println("公司A开出了发票");
    }
}


public class InvoiceCompanyB implements InvoiceCompany {

    @Override
    public void makeInvoice() {
        System.out.println("B公司开出了一张发票");
    }
}

有兴趣的同学可以看下我的上一篇文章,介绍使用工厂模式来实现开发票,附地址

https://blog.csdn.net/Gavin_Java_/article/details/106805489

新特新参与:默认方法添加

public interface InvoiceCompany {
    //开发票
    void makeInvoice();
    //发送邮件
    default void sendEmail() {
        System.out.println("将发票发送给了用户");
    }
}

测试

public class DefaultTest {
    public static void main(String[] args) {
        InvoiceCompanyA invoiceCompanyA = new InvoiceCompanyA();
        invoiceCompanyA.makeInvoice();
        invoiceCompanyA.sendEmail();
    }
}


输出结果:公司A开出了发票
         将发票发送给了用户

总结:使用感觉还不错。如果按正常来写,只能是先写接口,俩个公司各做实现。由于发送模式相同,这样不可避免造成了代码的冗余。 新接口使得后续在添加新公司的时候更加便捷。如果发送方式不一样了,也可以重写发送接口,这个大家可以试一试。

思考:如果俩个接口是继承关系,他们又有同一个默认方法,那么他的实现调用时会发生什么呢?

我的写作思路很简单,工作中遇到问题->学习、思考->应用到工作。可能不是太深。所以非常希望大家能够留下自己的见解,一起探讨,一起进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值