java8新特性学习-接口中的default方法
java8中新定义了一种方法,default方法。
那么引出了2个问题。
- ①.一个类继承了父类,同时继承了接口,父类和接口中具有同名函数时,那么调用该函数时执行哪一个?
- ②.一个类实现了两个接口,当两个接口中具有同名函数时,那么调用该函数时执行哪一个?
问题①实验:
public class ParentClass {
public String getName() {
return "ParentClass";
}
}
public interface DefaultInterface {
default String getName() {
return "DefaultInterface";
}
}
public class TestDefaultMethod extends ParentClass implements DefaultInterface {
@Test
public void test1() {
TestDefaultMethod testDefaultMethod = new TestDefaultMethod();
System.out.println(testDefaultMethod.getName());
}
}
输出:
ParentClass
由此可见执行了父类中的getName方法,这种执行规则叫做类优先规则。
问题②实验:
public interface DefaultInterfaceA {
default String getName() {
return "DefaultInterfaceA";
}
}
public interface DefaultInterfaceB {
default String getName() {
return "DefaultInterfaceB";
}
}
public class TestDefaultMethod implements DefaultInterfaceA, DefaultInterfaceB {
@Test
public void test1() {
TestDefaultMethod testDefaultMethod = new TestDefaultMethod();
System.out.println(testDefaultMethod.getName());
}
}
此时编译报错,提示我们需要重写getName方法,如图