Java8 默认方法

来源:这里教程网 时间:2026-02-17 21:20:14 作者:

Java8 默认方法

Java 8 在接口中引入了一种新的概念,即默认方法实现。这种能力是为了向后兼容性而添加的,以便旧的接口可以利用 Java 8 的 lambda 表达式能力。

例如,’List’ 或 ‘Collection’ 接口没有 ‘forEach’ 方法声明。因此,添加这样的方法将简单地破坏集合框架的实现。Java 8 引入了默认方法,这样 List/Collection 接口就可以有 ‘forEach’ 方法的默认实现,而实现这些接口的类无需实现相同的方法。

语法

public interface vehicle {   default void print() {      System.out.println("I am a vehicle!");   }}

多个默认值

当接口中有默认函数时,有可能一个类正在实现两个具有相同默认方法的接口。下面的代码解释了如何解决这种歧义。

public interface vehicle {   default void print() {      System.out.println("I am a vehicle!");   }}public interface fourWheeler {   default void print() {      System.out.println("I am a four wheeler!");   }}

第一种解决方案是创建一个自定义方法来重写默认实现。

public class car implements vehicle, fourWheeler {   public void print() {      System.out.println("I am a four wheeler car vehicle!");   }}

第二个解决方法是使用super调用指定接口的默认方法。

public class car implements vehicle, fourWheeler {   public void print() {      vehicle.super.print();   }}

静态默认方法

从Java 8开始,接口也可以有静态的辅助方法。

public interface vehicle {   default void print() {      System.out.println("I am a vehicle!");   }   static void blowHorn() {      System.out.println("Blowing horn!!!");   }}

默认方法示例

使用您选择的任何编辑器,在C:\ > JAVA中创建以下Java程序。

Java8Tester.java

public class Java8Tester {   public static void main(String args[]) {      Vehicle vehicle = new Car();      vehicle.print();   }}interface Vehicle {   default void print() {      System.out.println("I am a vehicle!");   }   static void blowHorn() {      System.out.println("Blowing horn!!!");   }}interface FourWheeler {   default void print() {      System.out.println("I am a four wheeler!");   }}class Car implements Vehicle, FourWheeler {   public void print() {      Vehicle.super.print();      FourWheeler.super.print();      Vehicle.blowHorn();      System.out.println("I am a car!");   }}

验证结果

使用 javac 编译器编译该类,方法如下:

C:\JAVA>javac Java8Tester.java

现在按照以下步骤运行Java8Tester –

C:\JAVA>java Java8Tester

它应该产生以下输出 –

I am a vehicle!I am a four wheeler!Blowing horn!!!I am a car!

相关推荐