您好我为子类创建对象并尝试调用子类变量但它调用了超类变量,超类和子类都具有相同的类变量名
在此输出名称中,“Child”期望“o2.name;”但输出是“基础”。请清楚地解释一下......
答案 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的名称值