java接口默认方法用default关键字定义,允许不破坏现有实现类添加新行为;它是实例方法,可被实现类继承或重写,冲突时需显式覆盖并可用interfacename.super.methodname()调用。

Java 中接口的默认方法用 default 关键字定义,它允许在不破坏已有实现类的前提下,为接口添加新行为。
默认方法的基本写法
在接口中,用 default 修饰符声明一个有方法体的方法,语法和普通实例方法类似,但必须写在接口里:
public interface Animal {
void makeSound(); // 抽象方法(无实现)
default void sleep() {
System.out.println("Zzz...");
}
}
实现类可以直接使用该方法,无需重写;也可以选择重写以提供自定义逻辑。
多个默认方法冲突时的解决规则
当一个类同时实现多个接口,而这些接口提供了同名同签名的默认方法时,编译器会报错,必须由实现类显式覆盖:
- 如果只有其中一个接口有该默认方法,类直接继承使用
- 如果两个接口都有 default void run(),类必须自己写一个 public void run() 来明确行为
- 若想复用某个接口的实现,可用 InterfaceName.super.methodName() 调用,例如:
Animal.super.run()
默认方法与静态方法的区别
默认方法是实例方法,可通过对象调用;接口中的静态方法则必须通过接口名调用,且不能被实现类继承:
public interface Vehicle {
default void start() { System.out.println("Engine on"); } // ✅ 对象可调:car.start()
static void info() { System.out.println("Vehicle info"); } // ✅ 只能 Vehicle.info()
}
适用场景和注意事项
- 适合给已有接口“升级”功能,比如 Java 8 在
Collection接口新增stream()、forEach()等默认方法 - 不能访问接口中的私有字段(接口中不能有实例字段)
- 不能是 final、synchronized 或 native
- 不支持重载后只改返回类型(仍需参数列表不同)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











