默认方法
关键字:default
Questions:
- 为什么要有默认方法?
jdk8之前接口只能声明抽象方法,不能包含实现方法,加入default关键字后变成非抽象方法(默认方法),目的是当接口本身已经有实现类后再加入新的方法时不修改其他实现类
点击查看代码
// 原有接口
interface Animal {
void eat();
}
点击查看代码
// 已有大量实现类(项目中可能有成百上千个)
class Dog implements Animal {
@Override
public void eat() { System.out.println("狗吃骨头"); }
}
class Cat implements Animal {
@Override
public void eat() { System.out.println("猫吃鱼"); }
}
现在要给接口增加一个新的方法run()
点击查看代码
interface Animal {
void eat();
// 新增抽象方法
void run();
}
在jdk7之前已有的所有实现类都必须重写run(),否则编译报错
jdk8加入default后只需要给一个默认实现,代码示例如下:
点击查看代码
interface Animal {
void eat();
// 默认方法:自带方法体
default void run() {
System.out.println("动物正常奔跑");
}
}
原有的实现类不需要进行改动,编译会正常进行,使用接口的默认逻辑
点击查看代码
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat();
dog.run(); // 自动调用接口默认方法
}
}
点击查看代码
狗吃骨头
动物正常奔跑
若某个类需要专属逻辑,在实现类中重写即可
点击查看代码
class Dog implements Animal {
@Override
public void eat() { System.out.println("狗吃骨头"); }
// 按需重写默认方法,可选操作
@Override
public void run() {
System.out.println("狗狗飞快地奔跑");
}
}
浙公网安备 33010602011771号