Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java升级问题_Java - Fatal编程技术网

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类型。这里不涉及强制转换,您如何期望重写基元类型?