Java 接口 新特性(Java8)
Java8新特性之接口增强
在Java7以及以前的版本中,接口里的方法都是抽象的,并且不存在静态方法,属性默认修饰符是public static final。所有方法的声明都是public [返回类型] [方法名](参数列表) [throws 异常列表]。
Java8定义的接口属性:only public, static & final are permitted.
Java8定义的接口方法:Only public, abstract, default, static and strictfp are permitted.
Java8定义的接口方法有2种具体实现类型,分别如下:
1 static
可以有静态方法:public static [返回类型] [方法名](参数列表) [throws 异常列表]
Java中可以实现多个接口,如果2个接口存在相同方法名和相同参数列表的静态方法(即方法签名相同),那么[子类.父类静态方法]不知道调用哪一个。因此,不允许使用[子类.父类静态方法],只能通过父类名来调用静态方法,解决了冲突问题。
public class CImpl implements InterA, InterB
其中,InterA和InterB存在同名静态方法,子类也可以存在方法签名相同的方法,但是不能用override修饰,因为静态方法不能被重写。
通过接口名来调用static类型的方法。
2 default
方法可以有默认实现:
public default void defaultMethod(){} (default不能省略,只能修饰接口中的默认方法)
子类重写接口默认方法时,必须去掉default。
@Override
public void defaultMethod(){
System.out.println("子类A中的默认方法,必须去掉default修饰符");
}
定义一个类实现该接口,通过该类的实例来调用default类型的方法。
优点
1 避免子类代码重复
当多个类实现一个接口的某个方法时,如果方法的具体实现代码相同,那么就会造成代码重复问题。接口增强相当于把公共的代码提取出来,放入接口定义中,实现类不需要重写该方法,解决了实现该接口的子类代码重复的问题。
2 克服单继承的缺陷
接口中可以定义static或default类型这两种有具体实现的方法,减少了接口和抽象类之间的区别。对于子类而言,抽象类只能单继承,接口可以实现多个。
参考资料
Java 接口 新特性(Java8)的更多相关文章
- Java 8 新特性1-函数式接口
Java 8 新特性1-函数式接口 (原) Lambda表达式基本结构: (param1,param2,param3) -> {代码块} 例1: package com.demo.jdk8; i ...
- Java 8 新特性:1-函数式接口
(原) Java 8 新特性1-函数式接口 Lambda表达式基本结构: (param1,param2,param3) -> {代码块} Lambda表达式结构: (type1 arg1,typ ...
- Java 8 新特性终极版
声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...
- 【整理】Java 8新特性总结
闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...
- 一小时上手Java 8新特性
一小时上手Java 8新特性 本文摘译自 https://www.journaldev.com/2389/java-8-features-with-examples,并做了适当增补. Iterable ...
- Java 8 新特性-菜鸟教程 (0) -Java 8 新特性
Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 ...
- Java-Runoob-高级课程:Java 8 新特性
ylbtech-Java-Runoob-高级课程:Java 8 新特性 1.返回顶部 1. Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Or ...
- Java 8新特性之旅:使用Stream API处理集合
在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda ...
- Java 8 新特性终极指南
1.前言 毫无疑问,Java 8的发布是自从Java5以来Java世界中最重大的事件,它在编译器.工具类和Java虚拟机等方面为Java语言带来的很多新特性.在本文中我们將一起关注下这些新变化,使用实 ...
随机推荐
- PHP-max_execution_time与fpm.request_terminate_timeout介绍
前段时间一位同事跟我说php脚本超时时间以fpm配置优先.经过自己测试后,其实不然,前面的观点只是在某些情况下成立. php脚本超时时间可以在php.ini的max_execution_time和fp ...
- CMDB服务器管理系统【s5day89】:采集资产之整合资产
1.业务逻辑单独写 1.代码目录结构 2.client.py from src.plugins import PluginManager class BaseClient(object): def p ...
- 基于ionic4、cordova搭建android开发环境
前颜(yan)最近公司有一个项目需求是利用h5进行跨平台开发,这里所说的跨平台开发指的是:将h5代码利用某种方式或工具环境进行打包,最后生成android的apk以及ios的ipa. 本文只讲解and ...
- 适配器模式-Adapter(Java实现)
适配器模式-Adapter 是作为两个不兼容的接口之间的桥梁. 本篇文章的代码github地址: https://github.com/GoldArowana/design-patterns/tree ...
- css样式关键字(initial,inherit,unset,revert,all)
关键字 在CSS中,有4个关键字理论上可以应用于任何的CSS属性,它们是initial(初始).inherit(继承).unset(未设置).revert(还原).而all的取值只能是以上这4个关键字 ...
- Apache Ambari安装过程(CentOS 6.5)
一.准备环境 1.host 本人准备了三台服务器, vim /etc/hosts 192.168.1.131 dk11 192.168.1.132 dk21 192.168.1.133 dk31 2. ...
- Problem B: Battle Royale(简单几何)
题目链接: B - Battle Royale Gym - 102021B 题目大意:给你两个坐标,表示起点和终点,然后给你两个圆,第一个圆包含两个圆,然后问你起点到终点的最短距离(不经过第二个圆 ...
- mysql 分库分表 ~ 柔性事务
一 定义 TCC方案是可能是目前最火的一种柔性事务方案二 具体 内容 TCC=try(预设)-confrim(应用确认)-canal(回滚取消)三 目的 解决跨服务调用场景下的分布式事务问题,避免使用 ...
- Window10系统中MongoDB数据库导入数据文件
首先进入C:\Program Files\MongoDB\Server\4.0\bin> 打开cmd 创建一个空的数据库集合 db.createCollection("myColl ...
- Ubuntu18.04更换官方默认更新源sources.list
⒈备份官方默认更新源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 备份官方更新源文件 ⒉编辑 1.打开 vi /etc/apt/sourc ...