Daisy Donergue 多莫歌·黛西

“By woman, you mean her?” 她也能叫女人?

  Java 8在13年9月发布,写这篇博文的时间已经是17年12月份了。来的有点晚,但是有必要补一下1.8的特性。

  一、基本介绍

  Java 8中接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实例来使用. 既然静态方法可以存在于接口当中, 那么大多数情况下 Foos工具类完全可以使用接口中的公共方法来代替 (或者将Foos置成package-private).

  上边的话理解起来就是接口中可以使用default关键字来修饰接口中的方法,打破了接口中不能写方法实现的弊端,也对原来的概念有了极大的冲击,因为之前一直在讲:“接口中不能有方法的实现”,but not now。所以现在更容易混淆的概念是:可以写方法实现可以多继承的接口,可以写方法实现但只能单继承的抽象类。所以再被问起接口中是否可以写实现,你回答的就能直接体现出你是否了解过1.8。代码如下:

interface Formula { //接口中实现了sqrt的默认算法,只需要使用 default关键字即可,在实现类中只需要实现calculate方法即可使用calculate和sqrt两个方法
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
}

  在过去,java类库的接口中添加方法基本上是不可能的. 在接口中添加方法意味着破坏了实现了这个接口的代码。弥补了Java一直以来不支持多继承,但支持多继承的接口不能写方法实现的缺点。但是现在, 只要能够提供一个正确明智的默认的方法的实现, java类库的维护者就可以在接口中添加方法。

  二、具体使用中的问题

  1、接口多继承情况下,同时继承的两个或多个接口中有同样的方法进行的实现,那么实现类中怎么不冲突?在不指明实现类方法指向的是继承自哪个接口的情况下,编译时会直接报错。所以解决方案就是,

    ①在实现类中指明使用了哪个父接口的方法,

    ②实现类中重写方法

  2、同时继承了接口和基类,而接口和基类中的同名方法都进行了实现,如何避免冲突?

    当同时继承了接口和基类,方法冲突时。实现类默认继承基类中的方法,也就是说基类优先级比接口高。当然也可以选择重写。

参考链接:

http://www.oschina.net/translate/everything-about-java-8

图片来源:八恶人(movie)

Java 8新特性之接口改善(八恶人-1)的更多相关文章

  1. Java 8新特性之 Nashorn(八恶人-6)

    Joe Gage 盖奇·乔 “First time in my life I made a pretty penny.And, figured I'd come home and spend time ...

  2. Java 8新特性之Stream(八恶人-3)

    “You John Ruth The Hangman” 绞刑者鲁斯·约翰 “When the Hangman catches you, you hang.”当被绞刑者抓住了,你肯定会被绞死 一.基本介 ...

  3. Java 8新特性之lambda(八恶人-2)

    Major Marquis Warren 沃伦·马奎斯少校 “Tring to get a couple of bounties in to Red Rock.”我想带几个通缉犯去红石镇 一.基本介绍 ...

  4. Java 8新特性之 Optional(八恶人-5)

    Oswaldo Mobray 莫博瑞·奥斯瓦尔多 “I‘m Oswaldo Mobray, the hangman in these parts.” “我是莫博瑞·奥斯瓦尔多,这片地区的绞刑官.” 一 ...

  5. Java 8新特性之 Base64(八恶人-7)

    "General" 我是个将军 “ You, sir a hyena. I hava no wish to speak to you.”  “你就是一个土狗,你不配跟我说话” 一. ...

  6. Java 8新特性-2 接口定义增强

    为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的  ...

  7. Java 8新特性探究(八)精简的JRE详解

    http://www.importnew.com/14926.html     首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 ...

  8. Java 8 新特性1-函数式接口

    Java 8 新特性1-函数式接口 (原) Lambda表达式基本结构: (param1,param2,param3) -> {代码块} 例1: package com.demo.jdk8; i ...

  9. Java 8 新特性:1-函数式接口

    (原) Java 8 新特性1-函数式接口 Lambda表达式基本结构: (param1,param2,param3) -> {代码块} Lambda表达式结构: (type1 arg1,typ ...

随机推荐

  1. Java基础—基础语法与常用命令

    一.基础语法 1.case不加break会有穿透效果 根据阿里规范,严禁省略default语句,即使它一句话也没有 2.for循环执行顺序: for(初始化1;条件2;迭代运算3){ 循环体4: } ...

  2. Bat 批处理杀死进程 重新启动程序

    @echo offset pa=%cd%taskkill /F /IM wgscdTool.exeecho %pa%\wgscdTool.exeping /n 2 127.1>nulstart ...

  3. 20155317 十六周second 取值

    20155317 十六周second 取值 题目如下图: secondset #define base 0xFFFFC0000 # #define &clock void setsecond( ...

  4. [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]

    题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...

  5. 使用Python实时获取cmd的输出

    最近发现一个问题,一个小伙儿写的console程序不够健壮,监听SOCKET的时候容易崩,造成程序的整体奔溃,无奈他没有找到问题的解决办法,一直解决不了,可是这又是一个监控程序,还是比较要紧的,又必须 ...

  6. Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调

    两个线程执行任务有同步和异步之分,看了Quora上的一些问答有了更深的认识. When you execute something synchronously, you wait for it to ...

  7. flask_admin 笔记二 授权和权限

    权限当然就是让有应该权限的用户能执行某些操作,把没有权限的用户限制在外面.Flask-admin提供了几种方法来处理: 1, Http basic Auth 最简单的身份验证形式是HTTP基本身份验证 ...

  8. C语言 -- 字符串详解

    字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中.同时,C 语言提供了一系列库函数来对操作字符串,这些库函数都包含在头文件 ...

  9. 二叉树 c++

    树 非空树 有一个(root)根节点r 其余节点可分为m个互不相交的有限集(子树)T1....Tm 具有n个节点的树,具有(n-1)条连接(指针域),需要构成结构体,尽可能减少空间域的浪费,使用儿子兄 ...

  10. 11.12 Daily Scrum(保存草稿后忘了发布·····)

    在实现过程中,我们发现要将不同人开发的组件整合起来并不是一件容易的事,于是我们调整了一下任务,修改了一下各自的程序:   Today's tasks  Tomorrow's tasks 丁辛 餐厅列表 ...