JAVA8新特性——接口定义增强
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~
接口定义增强
在JDK1.8以前,接口是定义的:
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
在JDK1.8之前,接口有如下特性:
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
而现在,JDK1.8,打破常规,增强接口定义:
允许在接口中定义普通方法,用default或static关键字修饰。当然,用这两个关键字定义也有些许不同。
用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定义方法的意义是避免子类重复实现同样的代码。