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

时间:2022-09-22 08:14:54

什么要单独写个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. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

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

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

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

  9. Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

    在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...

随机推荐

  1. SVN提交代码的规范

       协同开发中SVN的使用规范 先更新,再提交 SVN更新的原则是要随时更新,随时提交.当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交. 如果在修改的期间别人也更改了svn的对应文件, ...

  2. F#之旅2 - 我有特别的学F#技巧

    原文地址:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/learning-fsharp/ Learning F#Functio ...

  3. 模拟jsonp的实现

    function prescript(s) { if (s.cache === undefined) { s.cache = false; } if (s.crossDomain) { s.type ...

  4. RMI、RPC、SOAP通信技术介绍及比对

    1.RMI 使用java的程序员,对于RMI(RemoteMethod Invoke,远程方法调用)一定不陌生,在java中,为了在分布式应用开发时,能够方便调用远程对象,java提供了RMI的API ...

  5. (十五)UITableViewCell的常见属性

    UItableViewCellStyle: typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault ...

  6. 基于SpringBoot搭建应用开发框架(二) —— 登录认证

    零.前言 本文基于<基于SpringBoot搭建应用开发框架(一)——基础架构>,通过该文,熟悉了SpringBoot的用法,完成了应用框架底层的搭建. 在开始本文之前,底层这块已经有了很 ...

  7. stm32 HAL库笔记(一)——串口的操作

    昨天分析了普通io口的使用,和初始化代码流程,回顾一下,首先定义一个配置io口功能的结构体,然后开启时钟,再去配置这个结构体里面的各个成员变量,每个成员变量都有很多种选择,可以看各个成员变量 后面的注 ...

  8. Linux(以RHEL7为例)下添加工作区的方法&vert;&vert; The Way To Add Workspace On Linux

    Linux(以RHEL7为例)下添加工作区的方法 The Way To Add Workspace On Linux 作者:钟凤山(子敬叔叔) 编写时间:2017年5月11日星期四 需求:有时候在使用 ...

  9. asp&period;net core2-&gt&semi;2&period;1 webapi 进行了重大变更

    传统的在 启动时候 使用Mvc路由的配置不再有效.而是基于Attribute的声明标注进行配置路由.

  10. 小程序点击跳转外部链接 微信小程序提示:不支持打开非业务域名怎么办 使用web-view 配置业务域名

    小程序点击跳转外部页面 1.index.wxml  添加点击事件   标签可以是小程序支持的 <!-- 邀请好友 --> <cover-image src='/img/invitat ...