class Parent {
private int var = 1;
public int getVar() {
return var;
}
public void setVar(int var) {
this.var = var;
}
}
class Child extends Parent {
private int var = 2;
public int getVar() {
return var;
}
public void setVar(int var) {
this.var = var;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在测试它时,我们得到2.
Child child = new Child();
Parent parent = (Parent)child;
System.out.println(parent.getVar());
Run Code Online (Sandbox Code Playgroud)
我正在明确地将子对象转换为父对象并明确我的意图为什么然后当我做parent.getVar()我得到2?
Child child = new Child();
Parent parent = (Parent)child;
Run Code Online (Sandbox Code Playgroud)
您只是使用超类引用来指向.你的对象仍然是类Child,永远不会改变.所以你永远都会得到2.
所以当你打电话
System.out.println(parent.getVar());
Run Code Online (Sandbox Code Playgroud)
在编译时,它检查getVar()引用类中是否存在,Parent这是真的.所以它编译.在运行时,它知道实际对象的类,Child并执行相应的方法.