java8中接口有两个新特性,一个是静态方法,一个是默认方法。

static方法

java8中为接口新增了一项功能:定义一个或者多个静态方法。

定义用法和普通的static方法一样:

public interface InterfaceTest {
/**
* 接口中的静态方法
*/
static void testStatic() {
System.out.println("我是接口的一个静态方法");
}
}

调用的方式和静态类调用静态方法一样:

InterfaceTest.testStatic(); // 我是接口的一个静态方法

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

default方法

在接口中,增加default方法,是为了既有的成千上万的Java类库的类增加新的功能,且不必对这些类进行重新设计。因此它既被称为默认方法,又被称为拓展方法。

比如说,只需要在Collection接口中增加default Stream stream(),相应的Set和List接口以及它们的子类都会包含此方法,不必再去为每个子类重新copy这个方法。

default方法的出现,允许了我们在接口中添加非抽象的方法实现。

实现单一接口,仅实现接口:

public interface InterfaceTest {
/**
* 接口下的静态方法
*/
static void testStatic() {
System.out.println("我是接口下的静态方法");
} /**
* 接口下的默认方法
*/
default void testDefault() {
System.out.println("我是接口下的默认方法");
} } /**
* 只实现这个接口
*/
public class InterfaceTestImpl implements InterfaceTest { }

仅实现接口的运行:

InterfaceTest.testStatic(); // 我是接口下的静态方法
new InterfaceTestImpl().testDefault(); // 我是接口下的默认方法

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

实现单一接口,并重写接口中的default方法:

public class InterfaceTestImpl implements InterfaceTest {
/**
* 跟接口default方法一致,但不能再加default修饰符
*/
@Override
public void testDefault(){
System.out.println("我重写了接口的默认方法");
}
}

重写了default方法的运行:

InterfaceTest.testStatic(); // 我是接口下的静态方法
new InterfaceTestImpl().testDefault(); // 我重写了接口的默认方法

实现多个接口,且接口中拥有相同的default方法和static方法:

public class InterfaceATestImpl implements InterfaceTest, InterfaceTest1{
@Override
public void testDefault() {
System.out.println("我重写了两个接口相同的默认方法");
}
}

重写了两个接口相同的default方法的运行:

InterfaceTest.testStatic(); // 我是接口下的静态方法
new InterfaceTestImpl().testDefault(); // 我重写了两个接口相同的默认方法

如果实现多个接口的时候,每个接口都有相同的default方法,则必须要重写该方法。

"人的前半生没有对错,只有成长。"

java8新特性:interface中的static方法和default方法的更多相关文章

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

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

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

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

  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. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

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

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

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

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

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

  9. java 中的set方法和get方法的理解

    get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...

随机推荐

  1. iOS弹出UIViewController小视图

    在TestViewController1中弹出TestViewController2 在TestViewController中点击按钮或者什么触发方法里面写入以下代码 TestViewControll ...

  2. Angular路由与多视图综合案例

    Ajax请求存在的几个问题 (1)Ajax请求不会留下History 记录,会导致浏览器后退按钮失效 (2)用户无法直接通过URL进入应用中的指定页面(保存书签.链接分享给朋友) (3)Ajax对SE ...

  3. creo2.0安装方法和图文详解教程

    Creo2.0是由PTC公司2012年8月底推出的全新CAD设计软件包,整合了PTC公司的三个软件Pro/Engineer的参数化技术.CoCreate的直接建模技术和ProductView的三维可视 ...

  4. InfluxDB基本概念和操作

    InfluxDB基本概念 1.数据格式 在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value).格式如下: 1 cpu_us ...

  5. docker学习笔记(一)-vagrant/docker machine安装docker,阿里云通过docker machine安装docker

    首先需要先安装virtualbox https://www.vagrantup.com/ 下载安装vagrant 安装完毕后通过vagrant下载镜像,生成实例 mkdir test_centos7 ...

  6. go不使用工具包将大写字符转成小写字符的方法

    package main import ( "fmt" ) func main() { str := "hellOWorlD" //返回str is all l ...

  7. Eclipse中快速打开文件所在的文件夹位置

    本篇文章是紧接着Elicpse使用技巧-打开选中文件文件夹或者包的当前目录文章写的,本文主要是讲的利用eclipse插件的方式打开文件夹的位置, 由于eclipse版本的区别,所以插件也分成两种(实测 ...

  8. VS2017设置主题和代码字体

    从Visual Studio Marketplace下载主题插件 VS2017带有一个软件超市(Visual Studio Marketplace),可以和Eclipse一样从软件超市中下载各种插件, ...

  9. 个人博客添加网易云音乐Flash插件

    博客底部添加网易云音乐播放插件 歌单或者歌曲外链可从音乐界面"生成外链播放器"中得到,选择Flash播放插件即可 footer.html文件增加 实现效果: 历史精选文章: Jli ...

  10. .NET-记一次架构优化实战与方案-底层服务优化

    目录 .NET-记一次架构优化实战与方案-梳理篇 .NET-记一次架构优化实战与方案-前端优化 .NET-记一次架构优化实战与方案-底层服务优化 前言 经过上一篇<.NET-记一次架构优化实战与 ...