java - 为什么我可以从超类访问被覆盖的子类方法?
问题描述
为什么method()
调用被覆盖的子类method2
而不是method2
在BaseClass
?
public class BaseClass {
public void method(){
System.out.println("method() called");
method2();
}
public void method2(){
System.out.println("method2() called");
}
}
public class ChildClass extends BaseClass {
public void method2(){
System.out.println("method2() from BaseClass");
}
}
public class Main {
public static void main(String[] args) {
ChildClass obj = new ChildClass();
obj.method();
}
}
解决方案
这就是运行时多态性(Dynamic Method Dispatch)的概念。因为您将对象(实例)分配ChildClass
给obj
引用变量,所以它将调用method
子类。
总是首先调用创建实例的类的方法。如果该特定子类中不存在该方法,则调用父类继承的方法。
推荐阅读
- python - Python替换许多不同语言的特殊字符
- javascript - 寻找一种在javascript中定期清除本地存储的方法
- javascript - Javascript - 重构一个按概念拆分的类
- apostrophe-cms - 如何触发选择器模式?
- mongodb - 无法在 MacOS Mojave 10.14.2 上启动 Mongodb shell
- javascript - 导入引导 js 文件
- azure-data-explorer - 在 Azure 数据资源管理器中使用 Kusto 查询中的先前值填充空字段
- typescript - 在 React Native Expo 中预览上传的文件
- ssis - 将 Microsoft power bi 用于零售数据仓库的可视化是一种好习惯吗
- reactjs - 客户端 react-activity-feed @mentions 通知提要