面试题答案
一键面试- 类优先原则:
- 如果一个类继承自某个超类,同时又实现了多个接口,而超类中包含了与接口默认方法签名相同的方法,那么类继承的方法优先于接口的默认方法。
- 例如:
class SuperClass { public void sameMethod() { System.out.println("From SuperClass"); } } interface Interface1 { default void sameMethod() { System.out.println("From Interface1"); } } interface Interface2 { default void sameMethod() { System.out.println("From Interface2"); } } class SubClass extends SuperClass implements Interface1, Interface2 { // 这里使用的是SuperClass中的sameMethod方法,而非接口的默认方法 }
- 显式声明覆盖:
- 当一个类实现多个具有相同默认方法签名的接口时,编译器会强制要求该类显式地覆盖这个方法。
- 比如:
interface Interface3 { default void sameMethod() { System.out.println("From Interface3"); } } interface Interface4 { default void sameMethod() { System.out.println("From Interface4"); } } class SubClass2 implements Interface3, Interface4 { @Override public void sameMethod() { // 类中显式覆盖,决定具体行为 System.out.println("From SubClass2"); } }
- 使用接口名限定调用:
- 在覆盖方法中,可以使用接口名来限定调用特定接口的默认方法。
- 示例如下:
interface Interface5 { default void sameMethod() { System.out.println("From Interface5"); } } interface Interface6 { default void sameMethod() { System.out.println("From Interface6"); } } class SubClass3 implements Interface5, Interface6 { @Override public void sameMethod() { Interface5.super.sameMethod(); // 调用Interface5的默认方法 Interface6.super.sameMethod(); // 调用Interface6的默认方法 } }
通过以上这些机制,Java处理了接口默认方法在多继承场景下可能出现的冲突,确保代码的清晰性和可维护性。