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. php中经常使用的string函数

    strpos() ---返回字符串在另一字符串中首次出现的位置 strrpos() ---查找字符串在另一字符串中最后出现的位置 strchr()   ===  strstr()    ---找到字符 ...

  2. CAN总线学习系列之二——CAN总线与RS485的比较

    CAN总线学习系列之二——CAN总线与RS485的比较 上 一节介绍了一下CAN总线的基本知识,那么有人会问,现在的总线格式很多,CAN相对于其他的总线有什么特点啊?这个问题问的好,所以我想与其它总线 ...

  3. jquery ajax error函数和及其参数详细说明(转载)

    使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理,本文详细的说明了ajax中error函数和函数中各个参数的用法.一般error函数返回的参数有三个 ...

  4. 01-Maven功能特点

    1.Maven简介 2.Maven重要性 3.Maven原理

  5. js中常见继承方式

    1.原型模式 function Father(){ this.property = true; } Father.prototype.getValue = function(){ return thi ...

  6. win10触摸板手势

    尴尬的发现,今天才开始使用win10的手势,之前都是单指操作/笑哭 参考:http://www.sohu.com/a/63678223_230077 https://support.microsoft ...

  7. 20155226 《网络对抗》Exp9 Web安全基础

    20155226 <网络对抗>Exp9 Web安全基础 实践过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览器输入lo ...

  8. 蒙特卡罗方法 python 实现

    蒙特卡罗(Monte Carlo)方法的精髓:用统计结果去计算频率,从而得到真实值的近似值. 一.求圆周率的近似值,采用 投点法 import numpy as np import matplotli ...

  9. TMS320VC5509的DAC输出TLV5620

    1. TLV5620的SPI数据是11位的 但是看图3和图4,感觉用2个字节应该也可以的,不知道行不行,可以试一试吧 2. 不过可惜的是5509A的SPI没有11位的,有点麻烦,只能先试试用两个字节行 ...

  10. [CF1067D]Computer Game[凸包/斜率优化+倍增+矩阵乘法]

    题意 你有 \(n\) 个任务,初始收益为 \(a\) ,共 \(t\) 轮游戏,每轮可以选择完成一个任务(可以做多次),完成之后可以给任意任务升级,升级之后的任务收益为 \(b\) ,每个任务还有完 ...