java - Java中的静态和动态类型
问题描述
我有一个关于编译时类型(静态)和运行时类型(动态)类型的问题。据我了解,如果子类覆盖了超类的某个方法,那么在调用 Parent pTom = tom 之类的方法时,不得使用被覆盖的 pTom 方法,而必须实例化覆盖它的方法。
public class Parent {
int x = 0;
static void f() {
System.out.println("Ahem");
}
}
public class Child extends Parent {
int x = 5;
static void f() {
System.out.println("No way!");
}
public static void main(String[] args) {
Child tom = new Child();
System.out.println(tom.x); //output is No way!
Parent pTom = tom;
pTom.f();
System.out.println(pTom.x); //output is Ahem
}
}
你能帮我澄清一下我的理解吗?
解决方案
推荐阅读
- django - Django 组仅使用 users_id 并从模型中获取所有其他字段
- python - 在下面的模型中,我应该对 LSTM 的 input_shape 取什么值
- visual-studio-code - 运行 Rust 程序时,VS Code 说“msbuild : 术语 'msbuild' 无法识别......”?
- react-admin - 如果出现服务器端错误,请留在编辑页面
- javascript - 产品和价格的动态项目选择
- oracle-ebs - 我们可以从哪里检索 Oracle-EBS 中的可用承诺日期的 next_available_date?
- java - 如何从警报对话框中的按钮开始新活动?
- r - 我们如何使用 `order()` 或替代方法在闪亮的应用程序中对 `reactiveVal` `data.frame` 进行排序?
- marklogic - 从 9.0-8 升级到 9.0-10 时不兼容?
- blockchain - 有没有可能在 Corda 中添加多个对等点?