面试题答案
一键面试初始化过程阐述
当初始化 B
接口实例时,由于 B
接口嵌套了 A
接口,所以 A
接口相关的初始化过程会隐式地包含在 B
接口的初始化过程中。具体来说,实现 B
接口的类必须同时实现 A
接口中定义的所有方法。在创建实现 B
接口的实例时,就意味着 A
接口中定义的行为也被初始化并准备就绪,因为实现类必须满足 A
接口的契约。
代码示例(以Java为例)
- 定义接口
interface A {
void methodA();
}
interface B extends A {
void methodB();
}
- 实现接口
class ImplementAB implements B {
@Override
public void methodA() {
System.out.println("Implementation of methodA");
}
@Override
public void methodB() {
System.out.println("Implementation of methodB");
}
}
- 测试不同初始化方式对接口行为的影响
public class Main {
public static void main(String[] args) {
// 以B接口类型初始化
B bInstance = new ImplementAB();
bInstance.methodA();
bInstance.methodB();
// 以A接口类型初始化(实际上还是同一个实现类实例)
A aInstance = new ImplementAB();
aInstance.methodA();
// aInstance.methodB(); 此行会报错,因为A接口没有定义methodB
}
}
在上述代码中,当以 B
接口类型初始化实例时,可以调用 A
接口和 B
接口的方法,因为 B
接口继承自 A
接口。而当以 A
接口类型初始化实例时,只能调用 A
接口定义的方法,体现了接口类型对可调用方法的限制,这就是不同初始化方式对接口行为的影响。