Java 8 默认接口实现及其他语言特性
一、为什么有默认接口实现
1、由于Java 8的API在现存的接口上引入了非常多的新方法(如List接口上的sort方法)。在原有语法基础上,如Guava和Apache Commons这样的框架都需要修改实现了List接口的所有类。
2、为了解决这个问题,Java 8中的接口现在支持在声明方法的同时提供实现。主要有两种方式:
1)、Java 8允许在接口内声明静态方法。
2)、Java 8引入了一个新功能,叫默认方法,通过默认方法你可以指定接口方法的默认实现。
这种机制可以使你平滑地进行接口的优化和演进
二、冲突解决
我们知道Java语言中一个类只能继承一个父类,但是一个类可以实现多个接口。随着默认方法在Java 8中引入,有可能出现一个类继承了多个方法而它们使用的却是同样的函数签名。这种情况下,类会选择使用哪一个函数?
public interface InterfaceA {
default void hello(){
System.out.println("Hello from A");
}
}
public interface InterfaceB extends InterfaceA{
default void hello(){
System.out.println("Hello from B");
}
}
public class ClassC implements InterfaceA,InterfaceB{
public static void main(String[] args) {
new ClassC().hello();
}
}
public class ClassC implements InterfaceA,InterfaceB{
public static void main(String[] args) {
new ClassC().hello();
}
}
result:Hello from B
如果一个类使用相同的函数签名从多个地方(比如另一个类或接口)继承了方法,通过三条规则可以进行判断。
(1) 类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。
(2) 如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体。
(3) 最后,如果还是无法判断,继承了多个接口的类必须通过显式覆盖和调用期望的方法,
一、重复注解
二、集合类新增方法
三、CompletableFuture
四、ConcurrentHashMap
五、String
六、 Files
七、 精简JRE
Java8提供了三种紧凑的JRE,分别是compact1、compact2、compact3,他们的关系是compact1<compact2<compact3,他们包含的API如下图所示

八、 删除PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域这一部分用于存放Class和Meta的信息。Java8使用本地内存来存储类元数据信息并称之为:元空间( Metaspace),默认情况下,类元数据只受可用的本地内存限制。

九、Nashorn

本文作者:[魂皓轩][1] 欢迎关注公众号

本人保留所有权益,转载请注明出处。
欢迎有故事、有想法的朋友和我分享,可发送至 e-mail: lwqforit@163.com
[1]: 1 "文章编辑专用,同步微信公众号,微信,博客园,知乎,微博,思否(segmentfault),掘金,QQ
Java 8 默认接口实现及其他语言特性的更多相关文章
- 阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性
作者 | 阿里巴巴资深技术专家 雷卷,GitHub ID @linux-china 导读:在 Python.JavaScript 等一众编程语言崛起风靡之际,一代霸主 Java 风采虽不及当年,但仍 ...
- ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
ABAP 740的新语法: 上图的代码相当于: DATA: ls_data LIKE LINE OF it_data. READ TABLE it_data INTO ls_data WITH KEY ...
- Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...
- Java 抽象类与接口总结
一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法 含有抽 ...
- JNI的替代者—使用JNA访问Java外部功能接口
摘自:http://www.cnblogs.com/lanxuezaipiao/p/3635556.html JNI的替代者-使用JNA访问Java外部功能接口 1. JNA简单介绍 先说JNI(Ja ...
- Java抽象类和接口的比较
一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...
- Java 8 默认方法(Default Methods)
Java 8 默认方法(Default Methods) Posted by Ebn Zhang on December 20, 2015 Java 8 引入了新的语言特性——默认方法(Default ...
- java抽象类与接口区别
java抽象类与接口区别: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstr ...
- Java抽象与接口的区别
Java抽象与接口的区别 答案方式一.简单来说,1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 2.另外,实现接口的一定要实现接口里定义的所有 ...
随机推荐
- dva框架简单描述使用
首先传统的create-router-app脚手架生成的脚手架我们写仓库的时候用reducers进行调用还有thunk进行异步操作的时候,需要多层函数进行调用,这样会让我们代码进行维护的时候变得麻烦, ...
- Python中的socket
socket()模块函数用法 import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 A ...
- Node.js MVC模式+MongoDB实现学员管理系统
目录结构: 项目入口文件 /* Author:张波 */ /* 文件说明: 此文件是本项目的入口文件 启动这个项目,会先执行本文件中的代码 */ // 1. 引入模块 const http = req ...
- 在 windows 安装 Jekyll
本文告诉大家一个简单的方法在 Windows 安装 Jekyll 下载 ps1 文件 首先需要安装 Chocolatey ,这个工具可以快速安装 Jekyll 先下载Chocolatey,如果无法从这 ...
- @codeforces - 631E@ Product Sum
目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 给定一个序列 a,定义它的权值 \(c = \sum_{i=1}^{ ...
- BLOB类型对应Long binary,CLOB对应Long characters
BLOB类型对应Long binary,CLOB对应Long characters
- Android教程 -05 Android6.0权限的管理
视频为本篇博客知识的讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 上篇文章我们讲解了通过隐式意图拨打电话,在AndroidManifest.xml文件中添加了权限 <uses-permis ...
- AUTOSSH设置ssh隧道,实现反向代理访问内网主机
内网主机上配置: autossh -M -CNR :localhost: ubuntu@123.207.121.121 可以实现将访问主机123.207.121.121的1234端口的数据,通过隧道转 ...
- js如何获取地址栏上的参数id
直接上js代码 方法1: 父页面跳转地址栏带id>>>>window.location.href='${ctxAdmin}/study/checkForm?id='+id+ ...
- Python--day22--初识面向对象