默认方法
Java 8 新增了接口的默认方法。
简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。
我们只需在方法名前面加个 default 关键字即可实现默认方法。
-来自菜鸟教程
📚为什么会出现默认方法?
java8之前如果需要修改接口功能通常需要在接口中添加方法,而已经实现该接口的类都需要将此方法实现。
默认方法的出现使___接口在定义新方法的同时又不会影响到实现类___
使用
默认方法的实例
interface TestInterface1{
default void sayMessage(){
System.out.println("测试接口1");
}
}
实现的多个接口具有相同的默认方法
解决方案:
- 实现这两个接口的类重写该方法
interface TestInterface1{
default void sayMessage(){
System.out.println("测试接口1");
}
}
interface TestInterface2{
default void sayMessage(){
System.out.println("测试接口2");
}
}
public static class TestClass implements TestInterface1 ,TestInterface2 {
@Override
public void sayMessage() {
System.out.println("重写");
}
}
- super调用指定接口的方法
interface TestInterface1{
default void sayMessage(){
System.out.println("测试接口1");
}
}
interface TestInterface2{
default void sayMessage(){
System.out.println("测试接口2");
}
}
public static class TestClass implements TestInterface1 ,TestInterface2 {
@Override
public void sayMessage() {
TestInterface1.super.sayMessage();
}
}
}
静态默认方法
java8支持接口定义静态默认方法
static void staticMethod(){
System.out.println("静态默认方法");
}
默认方法实例
interface TestInterface1{
default void sayMessage(){
System.out.println("测试接口1");
}
static void staticMethod(){
System.out.println("静态默认方法");
}
}
interface TestInterface2{
default void sayMessage(){
System.out.println("测试接口2");
}
}
public static class TestClass implements TestInterface1 ,TestInterface2 {
@Override
public void sayMessage() {
TestInterface1.super.sayMessage();
TestInterface2.super.sayMessage();
TestInterface1.staticMethod();
}
}
@Test
public void test6(){
TestInterface1 test = new TestClass();
test.sayMessage();
}
}
参考:
菜鸟教程 https://www.runoob.com/java/java8-default-methods.html
https://www.jianshu.com/p/a58b6f5b0c54