1. 接口默认方法的“类优先”原则
- 选择父类中的方法(若接口和父类具有相同的方法,接口中的默认方法会被忽略)
- 接口冲突必须覆盖该方法(多个接口具有相同的默认方法)
public class Parent {
public String run() {
return "parent...";
}
}
public interface RunService {
default String run() {
return "runService...";
}
}
public interface AnotherService {
default String run() {
return "AnotherService...";
}
}
示例1:接口和父类默认方法相同时,执行父类的默认方法
public class RunDemo extends Parent implements RunService {
public static void main(String[] args) {
RunDemo runDemo = new RunDemo();
System.out.println(runDemo.run()); // 输出:parent...
}
}
示例2: 既继承父类又实现多接口,也是父类默认方法优先
public class RunDemo extends Parent implements RunService, AnotherService {
RunDemo runDemo = new RunDemo();
System.out.println(runDemo.run()); // 输出:parent...
}
示例3: 仅实现多接口,必须重写该默认方法
public class RunDemo implements RunService, AnotherService {
public static void main(String[] args) {
RunDemo runDemo = new RunDemo();
System.out.println(runDemo.run());
}
// 必须重写
@Override
public String run() {
// 自定义内容
return "RunDemo...";
// or 指定要使用的接口的默认方法
// return AnotherService.super.run();
}
}
2. 接口中的静态方法
- 接口静态方法和默认方法类似,只是接口静态方法不可以被实现类重写
- 接口静态方法可以直接通过
接口.静态方法
调用
public interface RunService {
static void show() {
System.out.println("this is static method");
}
}
public static void main(String[] args) {
RunService.show();
}
网友评论