覆盖超类和子类中的公共变量

时间:2015-09-22 13:57:06

标签: java

您好我为子类创建对象并尝试调用子类变量但它调用了超类变量,超类和子类都具有相同的类变量名

在此输出名称中,“Child”期望“o2.name;”但输出是“基础”。请清楚地解释一下......

3 个答案:

答案 0 :(得分:4)

变量在Java中不是多态的;他们不会互相覆盖。当你在子类中创建一个同名的变量时,它被称为隐藏。现在生成的子类实际上具有两个属性。您可以使用super.var或((SuperClass)this).var

访问超类中的那个

答案 1 :(得分:3)

在Java中,你不要覆盖字段,只需隐藏它们即可。 在运行时,java会检查您正在使用的对象的引用类型并调用该变量。

变量甚至不必是同一类型;它们只是两个共享名称的变量。

查看这些帖子:
Overriding member variables in Java
Overriding a super class's instance variables
Is there a way to override class variables in Java?

答案 2 :(得分:1)

Java不支持变量覆盖。所以当你写:

OverrridingBase o2= new Overridingchild();
System.out.println(o2.name);

JVM将采用o2的引用类型(即OverrridingBase),并将打印OverrridingBase的名称值