面试题答案
一键面试方式一:在类C中直接实现该方法
在类C中直接编写method
方法的具体实现。此时,类C对接口A和接口B中method
方法的实现进行了统一,两个接口共用这一个实现。例如:
class C implements A, B {
@Override
public void method() {
// 具体的业务逻辑代码
System.out.println("This is the implementation of method in class C.");
}
}
方式二:使用默认方法(Java 8及以上)
如果接口A和接口B是在Java 8及以上版本环境下定义,可以通过在接口中使用默认方法来解决部分冲突情况。可以在其中一个接口中定义默认实现,另一个接口保持抽象,类C继承默认实现的同时可按需重写。例如:
interface A {
default void method() {
System.out.println("Default implementation in interface A.");
}
}
interface B {
void method();
}
class C implements A, B {
// 这里可以不重写,使用接口A的默认实现
// 如果有特殊需求,也可以重写
@Override
public void method() {
A.super.method(); // 调用接口A的默认实现
// 也可以添加自己的业务逻辑
}
}
方式三:通过内部类委托方式
类C不直接实现method
方法,而是在类C内部创建两个内部类,分别实现接口A和接口B的method
方法,然后在类C的method
方法中根据具体逻辑选择调用内部类的方法。例如:
class C implements A, B {
private class AImpl implements A {
@Override
public void method() {
// 接口A的method方法实现
System.out.println("Implementation of method in AImpl.");
}
}
private class BImpl implements B {
@Override
public void method() {
// 接口B的method方法实现
System.out.println("Implementation of method in BImpl.");
}
}
@Override
public void method() {
// 根据业务逻辑选择调用AImpl或BImpl的method方法
boolean condition = true;
if (condition) {
new AImpl().method();
} else {
new BImpl().method();
}
}
}