博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java8学习笔记(四)--接口增强
阅读量:5820 次
发布时间:2019-06-18

本文共 927 字,大约阅读时间需要 3 分钟。

增强点

静态方法

public interface InterfacePlus {    void run();    static Date createDate(){        return new Date();    }}

默认方法

public interface InterfacePlus {    void run();    default void sayHello()    {        System.out.println("Hello Java8!");    }}

其他

就说过,Java8采用注解@FunctionalInterface来保证接口为函数接口,即接口中只显式声明一个抽象方法,新增的静态方法和默认方法是否会影响其成为一个函数接口呢,并不会,原因是:静态方法和默认方法均为非抽象方法!

同理,复写父类的非抽象方法也不影响其成为一个函数接口,如复写equals方法,如下图所示:
871373-20170809231048120-2118503248.png

测试

静态方法测试

静态方法可以直接用接口来调用。

Date date = InterfacePlus.createDate();    System.out.println(date);

默认方法测试

非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做扩展方法。在实现该接口时,该默认扩展方法在子类上可以直接使用,它的使用方式类似于抽象类中非抽象成员方法。

/*自行实现后可直接调用default方法*/        //子类实例化        InterfacePlusImpl interfacePlusImpl = new InterfacePlusImpl();        interfacePlusImpl.sayHello();        //Lambda实例化        InterfacePlus interfacePlus = System.out::println;        interfacePlus.sayHello();

但扩展方法不能够重载 Object 中的方法。例如:toString、equals、 hashCode 不能在接口中被重载。

871373-20170809233243855-1395471922.png

参考

转载地址:http://dnwdx.baihongyu.com/

你可能感兴趣的文章
一段旅程的结束和另一端旅程的开始
查看>>
iPhone 屏幕上的 Home 键在哪里?(已解决)
查看>>
background-position 用法详细介绍
查看>>
由浅入深表达式树(完结篇)重磅打造 Linq To 博客园
查看>>
如何得到数据库中所有表名 表字段及字段中文描述
查看>>
AJAX 实时读取输入文本(php)
查看>>
Jqueruy验证 form表单提交之前的中的数据
查看>>
伸展树——自顶向下
查看>>
UC如被百度控股,手机qq浏览器改如何进攻和防守
查看>>
mysql中判断字段为空
查看>>
人才标准思考
查看>>
如何写一份风投喜欢的商业计划书?【转载】
查看>>
Visual Studio 2015 预览版 - 支持跨平台开发Android/iOS应用程序(内置安卓模拟器)
查看>>
boa cgi程序cgi_header: unable to find LFLF
查看>>
jquery checkbox
查看>>
并发和并行的区别
查看>>
多线程——@synchronized(object)
查看>>
应用程序正常初始化(0xc015002)失败解决方法
查看>>
Grunt学习一:使用grunt创建jquery plugin.
查看>>
第十六章:网络IPC:套接字
查看>>