Java8 新特性default
在JDK1.8的Iterator接口中
package java.util;
import java.util.function.Consumer;
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
发现多了default修饰的具体的实现方法。
===========================================
因为接口有语法限制,所以要直接改变/扩展接口内的方法变得非常困难。
在尝试强化Java 8 Collections API,让其支持lambda表达式的时候,就面临了这样的挑战。为了克服这个困难,Java 8中引入了一个新的概念,叫做default方法,也可以称为Defender方法,或者虚拟扩展方法(Virtual extension methods)。
Default方法是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。
public class Main {
public static void main(String[] args) {
SimpleInterfaceImpl obj=new SimpleInterfaceImpl();
obj.Fun();
obj.Fun2();
}
}
interface SimpleInterface {
public void Fun();
default public void Fun2(){
System.out.println("Fun2");
}
}
class SimpleInterfaceImpl implements SimpleInterface {
@Override
public void Fun() {
System.out.println("Fun");
}
}
Fun
Fun2
这里如果没有default,是不可以编译通过的。
多接口,方法不同名
public class Main {
public static void main(String[] args) {
SimpleInterfaceImpl obj=new SimpleInterfaceImpl();
obj.Fun();
obj.Fun2();
obj.Fun3();
}
}
interface SimpleInterface {
public void Fun();
default public void Fun2(){
System.out.println("Fun2");
}
}
interface SimpleInterface2 {
default public void Fun3(){
System.out.println("Fun3");
}
}
class SimpleInterfaceImpl implements SimpleInterface,SimpleInterface2 {
@Override
public void Fun() {
System.out.println("Fun");
}
}
Fun
Fun2
Fun3
多接口,有同名的default方法
public class Main {
public static void main(String[] args) {
SimpleInterfaceImpl obj=new SimpleInterfaceImpl();
obj.Fun();
obj.Fun2();
}
}
interface SimpleInterface {
public void Fun();
default public void Fun2(){
System.out.println("Fun2");
}
}
interface SimpleInterface2 {
default public void Fun2(){
System.out.println("Fun3");
}
}
class SimpleInterfaceImpl implements SimpleInterface,SimpleInterface2 {
@Override
public void Fun() {
System.out.println("Fun");
}
}

产生了二义性,编译不通过。
http://www.importnew.com/7302.html
Java8 新特性default的更多相关文章
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- java8新特性全面解析
在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...
- Java8新特性
Java8新特性 Java8主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等. 1.函数式接口 Java 8 引入 ...
- 干货 | Java8 新特性教程
本教程翻译整理自 https://github.com/winterbe/java8-tutorial 本教程首发自个人网站: https://www.exception.site/java8/jav ...
- 乐字节-Java8新特性之Base64和重复注解与类型注解
上一篇小乐给大家说了<乐字节-Java8新特性之Date API>,接下来小乐继续给大家说一说Java8新特性之Base64和重复注解与类型注解. 一.Base64 在Java 8中,内置 ...
- 乐字节-Java8新特性-接口默认方法
总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...
- JAVA8新特性——接口定义增强
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 接口定义增强 在JDK1.8以前,接口是定义的: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法 ...
- java8 新特性精心整理
前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特 ...
- java8 新特性精心整理(全)
前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特 ...
随机推荐
- 开源top100
1.SwitchyOmega 项目简介:SwitchyOmega 是 SwitchySharp 的新版本.这是一个 Chrome 浏览器用来切换不同代理的插件.SwitchyOmega 初次安装时会检 ...
- NBUT 1457 Sona(莫队算法+离散化)
[1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...
- ASP.NET MVC3系列页面缓存、缓存依赖SQL(真实项目注意细节)
缓存依赖数据库 第一步 1通过vs里面带的命令提示窗口. 2或者.NET Framework 版本 4(64 位系统)条件,%windir%\Microsoft.NET\Framework64\v4. ...
- Rails--render partial时传递参数
1. example如下: <%=render :partial => "networks/primary_agent", :locals => {:id =&g ...
- SET GLOBAL long_query_time=0
SHOW VARIABLES LIKE '%long%'
- register instruction pointer
Computer Science An Overview _J. Glenn Brookshear _11th Edition We have already encountered the conc ...
- addevent兼容函数 && 阻止默认行为 && 阻止传播
function addEvent(a, b, c, d) { a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent(&qu ...
- WGZX:javaScript 学习心得--2
转贴javascript心得(二) 标签: javascriptajaxweb开发htmlfirefox框架 2008-09-11 10:56 636人阅读 评论(0) 收藏 举报 分类: UI(2 ...
- 查询mysql当前连接数
标签: mysql服务器cachedisk 2012-08-23 23:06 23377人阅读 评论(0) 收藏 举报 分类: MySql(36) 1.show status Threads_co ...
- js判断图片是否存在,并做处理
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...