面试题答案
一键面试- 多态实现背后的原理:
- 基于继承或接口实现:在这个例子中,
Circle
和Rectangle
类通过实现Shape
接口,建立了一种“是一种”(is - a)的关系。它们都“是一种”Shape
。 - 编译时和运行时的绑定:
- 编译时:编译器只知道变量的声明类型,例如在
printArea
方法中,参数是Shape
类型的数组,编译器仅检查Shape
接口中是否有calculateArea
方法,这是静态绑定。 - 运行时:JVM根据对象的实际类型来确定调用哪个具体实现的方法,这是动态绑定。这种机制允许程序在运行时根据对象的实际类型选择合适的方法实现,从而实现多态。
- 编译时:编译器只知道变量的声明类型,例如在
- 基于继承或接口实现:在这个例子中,
- JVM确定调用具体方法的过程:
- 方法表:JVM为每个类创建一个方法表。当
Circle
和Rectangle
类加载到内存时,它们的方法表中会包含calculateArea
方法的具体实现地址。 - 动态绑定:在
printArea
方法遍历Shape
数组时,JVM在运行时根据数组中每个对象的实际类型(Circle
或Rectangle
),在对应的方法表中查找calculateArea
方法的地址,然后调用该方法。例如,如果数组中的某个元素实际类型是Circle
,JVM就会在Circle
类的方法表中找到calculateArea
方法的实现并调用它;如果是Rectangle
,则在Rectangle
类的方法表中查找并调用相应实现。
- 方法表:JVM为每个类创建一个方法表。当