Java升级问题
我有以下代码Java升级问题,java,Java,我有以下代码 public class Main { public static void main(String[] args) { Parent upCasted = new Child(); System.out.println("String: " + upCasted.getString()); System.out.println("Int: " + upCasted.a); } } class Parent {
public class Main {
public static void main(String[] args) {
Parent upCasted = new Child();
System.out.println("String: " + upCasted.getString());
System.out.println("Int: " + upCasted.a);
}
}
class Parent {
int a = 1;
public String getString() {
return "Parent";
}
}
class Child extends Parent {
int a = 2;
@Override
public String getString() {
return "Child";
}
}
当我运行它时,我在控制台中看到了这一点
String: Child
Int: 1
为什么在向上转换期间,
int
值取自父级
,而字符串
值取自子级?
这是因为在子类中重新声明时不会重写实例字段
相反,当计算upCasted.a
时,Java会查看upCasted
的静态/声明类型,以了解要读取哪个类的字段(而不是在upCasted
指向的对象的运行时类)
这就是为什么不应该对超类和子类中的字段使用相同的名称。什么是“向上转换”?您已将变量声明为Parent类型。这里不涉及强制转换,您如何期望重写基元类型?