java1.8新特性之接口定义增强

原创 2017年05月11日 14:11:34

本篇重点:使用default和static定义接口方法


从java发展之初到今天已经经过了20多年的时间了,在这20多年的时间里所有的java开发者都知道java中的接口是由全局常量和抽象方法组成。但是从jdk1.8的时代这一组成改变了。

为什么会改变?

如果说有某一个接口,这个接口随着时间的发展已经产生了2w个子类。突然发现,这个接口里的方法不足,应该再增加一个方法,而针对于所有不同的子类,这个方法的功能实现是完全一样的。按照最初的做法应该在每一个子类上都实现这个新的方法,那么就要修改2w个子类。

所以为了解决这样的问题,允许在接口里面定义普通方法了。但是要定义普通方法就必须明确的使用default来进行定义。

定义default方法:

package com.wonglar.demo;

interface IMessage{
    public void print();  //接口中原始的方法

    default void fun(){   //这是一个普通方法
        System.out.println("很神奇的一个方法。。。。。");
    }
}

class MessageImpl implements IMessage{

    @Override
    public void print() {
        System.out.println("Hello World !");
    }

}

public class Demo {
    public static void main(String[] args) {
        IMessage m = new MessageImpl();
        m.print();
        m.fun();     //此方法是在接口中直接定义的
    }
}

除了使用default定义方法之外,还可以使用static定义方法,一旦使用了static定义方法,意味着这个方法只能由类名称调用。

定义static方法:

package com.wonglar.demo;

interface IMessage{
    public void print();  //接口中原始的方法

    default void fun(){   //这是一个普通方法
        System.out.println("很神奇的一个方法。。。。。");
    }
    //在接口中定义static方法
    static void get(){
        System.out.println("直接由接口调用!");
    }
}

class MessageImpl implements IMessage{

    @Override
    public void print() {
        System.out.println("Hello World !");
    }

}

public class Demo {
    public static void main(String[] args) {
        IMessage m = new MessageImpl();
        m.print();
        m.fun();          //调用接口中的方法
        IMessage.get();  //直接由接口调用
    }
}

在java1.8里面还有一个重要的概念:内部类访问方法参数的时候可以不加上final关键字,所有出现的这些新特性,完全打破了java已有的代码组成形式。

总结:
1、接口里面使用default和static定义方法的意义是避免子类重复实现同样的代码。
2、接口的使用还应该以抽象方法为主。

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于typeScript请求服务端的js-api-sdk统一封装思路

项目地址在前端开发中像服务端请求数据是非常重要的,特别是在复杂的项目中对后台的api接口进行友好的调用是非常重要的(这里不得不说typeScript写起代码的体验是很爽的)。基本思路,可以想后台一样进...

video.js使用笔记(1)

videojs github官网地址 官方文档地址 这里简单的对官方的英文参数列表做了一个简单说明,并写了一Jquery的适配调用/** * Created by wuxp on 2017/4...

java8新特性-接口定义增强

Java8之前java接口由全局常量和抽象方法所做组成,java8及以后的接口定义可以使用default,static定义。          例如:一个接口随着时间的推移,接口下面有2000个实现...

JAVA 8新特性 允许接口定义非抽象方法 快速入门案例

JavaSE8.0出来也蛮久了 网上也蛮多案例和教程 但大多数都写的比较复杂  而且更新的新特性也不是很齐全。 本案例是根据甲骨文官方的Demo进行修改的 授人以鱼不如授人以渔,学习方式其...
  • austral
  • austral
  • 2016年11月29日 23:51
  • 846

JAVA 1.8 新特性学习(1) 接口的默认方法

java 1.8中,现在接口也可以定义实现了的方法了。用default定义方法就可以了。具体的例子可以看下面的代码: public class Test { public static voi...

JDK1.8新特性(三)函数式接口

Java8中还提出了一个新名词——函数式接口1(Functional Interface),用来特指某类型的接口。这类接口中定义了唯一的抽象方法,在早期这类接口被叫做SAM类型接口(single ab...

JDK1.8新特性-New Features in Java SE 8

  • 2016年06月23日 18:47
  • 3.03MB
  • 下载

JAVA1.8新特性视频讲解

  • 2017年12月15日 15:57
  • 49B
  • 下载

java1.8重要新特性

1.接口中可以有默认方法实现 interface A { public void sayString(String str); default public void SayInt(int i)...
  • Senssic
  • Senssic
  • 2014年04月02日 12:53
  • 4690
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java1.8新特性之接口定义增强
举报原因:
原因补充:

(最多只允许输入30个字)