什么要单独写个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. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

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

  2. 论文学习-系统评估卷积神经网络各项超参数设计的影响-Systematic evaluation of CNN advances on the ImageNet

    博客:blog.shinelee.me | 博客园 | CSDN 写在前面 论文状态:Published in CVIU Volume 161 Issue C, August 2017 论文地址:ht ...

  3. OpenCV各版本差异与演化,从1.x到4.0

    博客:blog.shinelee.me | 博客园 | CSDN 写在前面 最近因项目需要,得把OpenCV捡起来,登录OpenCV官网,竟然发现release了4.0.0-beata版本,所以借此机 ...

  4. [转]Blue Prism VBO Cheat Sheet

    本文转自:https://www.cheatography.com/ethanium/cheat-sheets/blue-prism-vbo/ Blue Prism MAPIEx Configure ...

  5. ArcPy 重命名拷贝删除图层

    使用Python脚本进行图层的重命名拷贝及删除,并在过程中利用logging进行日志记录. 附上Python代码: # -*- coding: utf-8 -*- # nightroad import ...

  6. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(3)!

    ---恢复内容开始--- 前言- 虽然上文说的是model的绘制但是这个说法并不严谨,之前的几个例子都会有模型文件的读入和载入,可是在LAppRenderer.LAppView中并没有.moc等文件的 ...

  7. Simulink 产品说明

    Simulink 产品说明 仿真和基于模型的设计 Simulink® 是一个模块图环境,用于多域仿真以及基于模型的设计.它支持系统级设计.仿真.自动代码生成以及嵌入式系统的连续测试和验证.Simuli ...

  8. Scrum笔记

    Scrum的笔记,需要的童鞋拿去,有错漏处请指正,谢谢. 出处:https://www.cnblogs.com/Ryu666/p/9890609.html

  9. c#核心基础 - 浅谈 c# 中的特性 Attribute)

    特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前面 ...

  10. lua os.date函数定义和示例

    os.date函数定义 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. lua源码中os.date的注释如下: --- --- ...