面试题答案
一键面试动态绑定的工作原理
- 编译时:当编译器看到
A
类型的变量调用execute
方法时,它会在A
类中查找execute
方法。因为A
类确实有execute
方法,所以编译通过。这里编译器只关心变量的声明类型,即A
类型。 - 运行时:根据实际赋给
A
类型变量的对象的实际类型(如B
、D
或E
类型的实例)来决定调用哪个类的execute
方法。这就是动态绑定。Java 虚拟机(JVM)在运行时会检查对象的实际类型,然后调用对应实际类型类中重写的execute
方法。例如,如果A
类型的变量实际指向一个D
类的实例,那么运行时就会调用D
类中的execute
方法。
在子类中复用A类execute方法的通用初始化逻辑
在子类的 execute
方法中,可以通过调用 super.execute()
来复用 A
类 execute
方法中的通用初始化逻辑。例如:
class B extends A {
@Override
public void execute() {
super.execute(); // 调用A类的execute方法,执行通用初始化逻辑
// B类特有的逻辑
}
}
class D extends C {
@Override
public void execute() {
super.execute(); // 调用C类的execute方法,C类的execute方法又会调用B类的execute方法,最终调用A类的execute方法执行通用初始化逻辑
// D类特有的逻辑
}
}
class E extends C {
@Override
public void execute() {
super.execute(); // 调用C类的execute方法,C类的execute方法又会调用B类的execute方法,最终调用A类的execute方法执行通用初始化逻辑
// E类特有的逻辑
}
}
这样在每个子类的 execute
方法中,通过 super.execute()
调用父类的 execute
方法,就可以保证通用初始化逻辑被执行,而不需要在每个子类中重复编写。