介绍
Java接口已经比Java版本进行了更多的演变,而Java 8和Java 9则有所发展。在本文中,我们将探讨接口在Java 8之前的样子以及如何在Java 8和Java 9中得到增强。
Java 8之前的接口
接口将具有一个或多个抽象方法,如下所示:
public interface MyInterface {public void doSomething();
}
其实现为:
public class MyImplementation implements MyInterface{public void doSomething() {System.out.println("Done in MyImplementation");}public static void main(String[] args) {MyImplementation impl = new MyImplementation();impl.doSomething();}}
Java 8中的接口
在Java 8中,为了增强collections API以支持lambda表达式和新方法,必须增强java.util.Collection接口。 这将意味着破坏实现该接口的所有代码。 因此,他们在界面中提出了一种称为default
方法的东西。
因此,现在接口可以具有实现的方法,从而为接口的增强提供了空间:
public interface MyInterface {public void doSomething();public default void doTheDefaultThing() {System.out.println("Done in a default way!");}
}
Java 9中的接口
即使使用default
方法,接口中也存在一个小的限制,即缺少在default
方法之间共享代码的构造。
在Java 9中,他们引入了private
方法,这些方法便于在接口中非抽象方法之间共享代码:
public interface MyInterface {public void doSomething();public default void doTheDefaultThing() {System.out.println("Done in a default way!");helper();}private void helper() {System.out.println("Calling the helper!!!");}
}
以上界面的增强作用:
public static void main(String[] args) {MyImplementation impl = new MyImplementation();impl.doSomething();impl.doTheDefaultThing();
}
结论
JDK团队显然已经使接口比Java8之前强大得多,并且还提供了一种在不破坏客户端代码的情况下增强库中接口的方法。
翻译自: https://www.javacodegeeks.com/2017/12/java-interface-journey-years-java-9-default-private-methods.html