📜  Java 8-默认方法(1)

📅  最后修改于: 2023-12-03 15:15:54.953000             🧑  作者: Mango

Java 8 - 默认方法

介绍

Java 8 引入了一项重要的特性,即“默认方法”(default methods),也称为“扩展方法”或“Defender方法”。默认方法使得接口能够拥有具体的方法实现,这样一来,我们就可以向已有的接口中添加新的方法,而不会影响已有的实现类。

默认方法为Java的接口提供了一种向后兼容的方法扩展机制,允许接口的实现类在不改变已有代码的情况下,对接口进行扩展。这一特性主要是为了解决Java的接口单继承问题而引入的。

语法

默认方法的语法很简单,只需在接口中使用 default 关键字来定义一个默认方法。

public interface MyInterface {
    // 默认方法
    default void myMethod() {
        // 执行代码
    }
}

接口中的默认方法可以有方法体,也可以没有。在接口中定义的默认方法可以被实现类直接继承和使用。

示例

下面是一个示例,演示了如何在接口中使用默认方法:

public interface MyInterface {
    void method1(); // 抽象方法
    
    default void method2() {
        // 默认方法实现
        System.out.println("执行默认方法");
    }
}

public class MyClass implements MyInterface {
    public void method1() {
        // 实现 method1()
        System.out.println("执行实现方法");
    }
}

public class Main {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.method1();  // 执行实现方法
        obj.method2();  // 执行默认方法
    }
}
多个默认方法

一个接口可以同时拥有多个默认方法。如果一个类实现了多个接口并且这些接口具有相同的默认方法,则实现类必须覆盖默认方法并提供自己的实现,以消除歧义。

默认方法与继承

默认方法的一个重要功能是它们可以被接口的实现类继承。如果一个接口继承了另一个接口,并且两个接口都定义了同名的默认方法,那么实现类只需要覆盖其中一个默认方法,就可以同时实现两个接口。

使用注意事项
  • 默认方法可以被实现类重写和继承。
  • 实现类可以通过接口名称.super来调用接口的默认方法。
  • 如果一个类继承了一个父类,并同时实现了一个接口,且父类和接口都有相同的方法名和参数,那么父类的方法将优先于接口的默认方法。
  • 默认方法的声明必须使用 public 或者不加修饰符(默认为 public)。
总结

默认方法是Java 8 引入的一项新特性,使得接口能够拥有具体的方法实现。默认方法为Java的接口提供了一种向后兼容的方法扩展机制,使得我们可以在不破坏已有代码的情况下,对接口进行扩展。它在解决Java接口单继承问题的同时,提供了更大的灵活性和代码复用性。