Java 默认 方法
什么是默认方法?
Java 8 引入了一个重要的新特性:接口默认方法(Default Methods)。在此之前,Java 接口只能包含抽象方法(没有实现体的方法)和常量。而默认方法允许我们在接口中定义具有实现体的方法,实现该接口的类可以直接使用这些方法,而无需提供实现。
默认方法的引入主要是为了解决接口演化问题。假设你发布了一个接口,并且已经有许多类实现了该接口。如果你想要在接口中添加新方法,那么所有实现该接口的类都必须实现这个新方法,这可能会导致大量的代码兼容性问题。默认方法解决了这一挑战。
默认方法的语法
默认方法的声明使用 default
关键字,并且必须包含一个方法体:
public interface MyInterface {
// 普通的抽象方法(没有实现体)
void abstractMethod();
// 默认方法(有实现体)
default void defaultMethod() {
System.out.println("这是默认方法的实现");
}
}
为什么需要默认方法?
Java 8 引入默认方法主要有以下几个原因:
- 接口演化:允许向现有接口添加新功能,而不破坏实现该接口的类
- API 增强:使 Java 集合框架能够利用 lambda 表达式
- 多重继承的行为:提供了一种类似多重继承的机制,但避免了传统多重继承的复杂性
默认方法的基本使用
让我们通过一个简单的例子来看看默认方法的使用:
public interface Vehicle {
// 抽象方法
void start();
// 默认方法
default void honk() {
System.out.println("嘟嘟!");
}
}
public class Car implements Vehicle {
@Override
public void start() {
System.out.println("汽车启动");
}
// 不需要实现honk()方法
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.start(); // 输出: 汽车启动
car.honk(); // 输出: 嘟嘟!
}
}
在上面的例子中,Car
类实现了 Vehicle
接口,但只需要实现抽象方法 start()
。默认方法 honk()
可以直接被 Car
类的实例调用,而无需在 Car
类中提供实现。