什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合。stream方法就是接口Collection中的default方法。所以准备专门写写关于java8新特性的文章,虽然现在10已经发布了。但还是要认真的去了解下新版本的变化。

static方法

java8中为接口新增了一项功能:定义一个或者更多个静态方法。用法和普通的static方法一样。

代码示例

public interface InterfaceA {

    /**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceA++showStatic");
} }

测试

public class Test {
public static void main(String[] args) {
InterfaceA.show();
}
}

结果

InterfaceA++showStatic

注意,实现接口的类或者子接口不会继承接口中的静态方法

default方法

在接口中,增加default方法, 是为了既有的成千上万的Java类库的类增加新的功能, 且不必对这些类重新进行设计。 比如, 只需在Collection接口中
增加default Stream stream(), 相应的Set和List接口以及它们的子类都包含此的方法, 不必为每个子类都重新copy这个方法。

代码示例

实现单一接口,仅实现接口
public interface InterfaceA {

    /**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceA++showStatic");
} /**
* 默认方法
*/
default void showDefault() {
System.out.println("InterfaceA ++showDefault");
} } /**先只实现这个接口
* @author: curry
* @Date: 2018/7/31
*/
public class InterfaceAImpl implements InterfaceA{ }

测试

public class Test {
public static void main(String[] args) {
InterfaceA.showStatic();
new InterfaceAImpl().showDefault();
}
}

结果

InterfaceA++showStatic
InterfaceA ++showDefault

如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。

实现单一接口,重写接口中的default方法
public class InterfaceAImpl implements InterfaceA{

    /**
* 跟接口default方法一致,但不能再加default修饰符
*/
@Override
public void showDefault(){
System.out.println("InterfaceAImpl++ defaultShow");
} }

测试

public class Test {
public static void main(String[] args) {
InterfaceA.showStatic();
new InterfaceAImpl().showDefault();
}
}

结果

InterfaceA++showStatic
InterfaceAImpl++ defaultShow
实现多个接口,且接口中拥有相同的default方法和static方法

新创建个接口InterfaceB

/**
* @author: curry
* @Date: 2018/7/31
*/
public interface InterfaceB {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceB++showStatic");
} /**
* 默认方法
*/
default void showDefault() {
System.out.println("InterfaceB ++showDefault");
} }

修改实现类

public class InterfaceAImpl implements InterfaceA,InterfaceB{
@Override
public void showDefault() {
System.out.println("InterfaceAImpl ++ showDefault");
}

测试结果

InterfaceA++showStatic
InterfaceAImpl ++ showDefault

总结

看了接口中新增的这个新特性,感觉还是不错的,内容也比较简单。需要注意一点就是如果实现多个接口时,每个接口都有相同的default方法需要重写该方法。

参考:Java8新特性(一)_interface中的static方法和default方法

Java8新特性(一)_interface中的static方法和default方法的更多相关文章

  1. java8新特性:interface中的static方法和default方法

    java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...

  2. Java8新特性interface中的static方法和default方法

    static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...

  3. JS中的call()方法和apply()方法用法总结

    原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...

  4. JS中的call()方法和apply()方法用法总结(挺好 转载下)

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

  5. js中的splice方法和slice方法简单总结

    slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...

  6. 【Java8新特性】接口中的默认方法和静态方法,你都掌握了吗?

    写在前面 在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法.而在Java8中,接口中可以声明默认方法和静态方法,本文,我们就一起探讨下接口中的默认方法 ...

  7. 【Java8新特性】- 接口中默认方法修饰为普通方法

    Java8新特性 - 接口中默认方法修饰为普通方法 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学 ...

  8. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

    1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...

  9. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机--(转)

    原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法 ...

随机推荐

  1. 新建项目到Jenkins中

    在以Jenkins为镜像创建Docker容器时,我们在jenkins的dockerfile文件中写明了要安装Docker Compose,目的也是在Jenkins容器中借助Docker Compose ...

  2. 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)

    001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...

  3. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  4. HTTP1.0和HTTP1.1的区别

    1.HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理 HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器 ...

  5. 分享基于 websocket 网页端聊天室

    博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...

  6. js或jquery实现点击某个按钮或元素显示div,点击页面其他任何地方隐藏div

    点击某个元素显示div,点击页面其他任何地方隐藏div,可用javascript和jquery两种方法实现: 一:javascript实现方法技巧<script>//定义stopPropa ...

  7. Ubuntu16.04安装Qt5.12.2

    第一步:下载文件 https://download.qt.io/official_releases/qt/5.12/5.12.2/ 第二步:安装依赖库 sudo apt-get install bui ...

  8. phpStudy2018安装与配置步骤详解

    phpStudy 2018是一款非常强大的php环境调试工具,一次性安装,无须配置即可使用,是非常方便.好用的PHP调试环境.对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事:对老手来 ...

  9. 微信公众号签名错误 invalid signature

    在出现了 invalid signature签名错误后按照以下步骤进行校验1.确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=j ...

  10. loj#6041. 「雅礼集训 2017 Day7」事情的相似度(SAM set启发式合并 二维数点)

    题意 题目链接 Sol 只会后缀数组+暴躁莫队套set\(n \sqrt{n} \log n\)但绝对跑不过去. 正解是SAM + set启发式合并 + 二维数点/ SAM + LCT 但是我只会第一 ...