【发布时间】:2021-10-02 21:05:59
【问题描述】:
public class Main {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.x); // 10 is printed
System.out.println(p.print()); // Child is printed
}
}
class Parent{
int x = 10;
public String print(){ return "Parent";}
}
class Child extends Parent{
int x = 55;
public String print(){ return "Child"; }
}
为什么动态方法调度对属性不起作用? 有什么目的、意义还是就是这样设计的。
【问题讨论】:
-
为什么“... 方法 ...”不适用于字段。您的问题已经存在明显的矛盾
-
是的 :) 它是方法调度 :) 好的,为什么没有任何动态属性调度?
-
老实说,我不知道这其中的技术原因,但这是事实。字段不能那样工作。
-
here 实际上是查看 JLS 的一个不错的答案,但它没有提到 why 部分。
-
我相信
x不会覆盖父类,它会隐藏它。这似乎是没有区别的区别,但这是我得到的。因为x没有被覆盖,所以您根据静态类型获得定义,您将其声明为Parent。
标签: java inheritance polymorphism overriding dispatch