JAVA8新特性——接口定义增强

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA8新特性——接口定义增强相关的知识,希望对你有一定的参考价值。

  JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~

接口定义增强

  在JDK1.8以前,接口是定义的:

     接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

  在JDK1.8之前,接口有如下特性:

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

  而现在,JDK1.8,打破常规,增强接口定义:

  允许在接口中定义普通方法,用defaultstatic关键字修饰。当然,用这两个关键字定义也有些许不同。

  用default关键字定义方法:在接口中使用default关键字定义方法,需要添加方法体,default见名思意就是说,为这个方法提供一个默认写好的方法体实现。当然,在子接口中也可以继续去覆写它。

 1 interface  MyInterface{
 2      void Method();//接口中原始定义方法的方式
 3 
 4      default void dMethod() {
 5         System.out.println("default 定义的方法!");
 6     }
 7 }
 8 class  InterfaceImpl implements  MyInterface{
 9 
10     @Override
11     public void Method() {//没用default关键字定义的方法,实现接口,就必须要覆写接口中的方法
12         System.out.println("Hello World!");
13     }
14 
15 //    @Override
16 //    public void dMethod() {
17 //        System.out.println("当然,也可以去覆写dMethod!");
18 //    }
19 }
20 public class Main {
21         public static void main(String[] args){
22             InterfaceImpl anInterface = new InterfaceImpl();
23             anInterface.Method();
24             anInterface.dMethod();//调用default方法,输出:"default 定义的方法!"
25         }
26 }

  用Static关键字定义方法:我们知道,在java中,使用static关键字修饰的方法叫做静态方法,它不依赖于某个对象就可以访问。在接口中定义static方法也是如此,可以通过接口名直接调用。

 1 interface  MyInterface1{
 2 
 3     static void sMethod() {
 4         System.out.println("static 定义的方法!");
 5     }
 6 }
 7 public class Main1 {
 8     public static void main(String[] args){
 9         MyInterface1.sMethod();//直接由接口名调用static方法。
10     }
11 }

  总之,接口里面使用default和static定义方法的意义是避免子类重复实现同样的代码。 

  

 

以上是关于JAVA8新特性——接口定义增强的主要内容,如果未能解决你的问题,请参考以下文章

Java8新特性:接口

Java 接口 新特性(Java8)

java8新特性,使用流遍历集合

Java 8 新特性总结

Java8新特性——Lambda表达式之基本语法 & 自定义函数式接口

Java8新特性——Lambda表达式之基本语法 & 自定义函数式接口