【发布时间】:2015-06-30 08:24:54
【问题描述】:
我创建了 2 个类 - Parent 和 Child,都像这样:
Parent.java
public class Parent {
String name = "Parent";
}
Child.java
public class Child extends Parent {
String name = "Child";
}
子类正在遮蔽父类实例变量name。
我已经创建了一个这样的主程序:
Test.java
public class Test {
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
System.out.println(p.name);
System.out.println(c.name);
Parent pc = new Child();
System.out.println(pc.name);
}
}
程序的输出是这样的:
Parent
Child
Parent
现在我不清楚何时尝试访问pc.name,然后根据上述输出得到Parent 的输出,而不是Child。
我的理解是这样的,我创建了一个Parent 类型的引用变量pc,但它指向Child 对象作为我的程序。因此,在程序运行时,java 在堆内存中为子类创建一个对象,由于子类隐藏了name 变量,pc.name 的输出将是Child。但是根据程序,我的理解是不正确的,这个概念只适用于被子类覆盖的方法。
您能否解释一下为什么实例变量与方法的情况不同?
【问题讨论】:
-
顺便说一句,
Child extends Parent没有意义.. -
@MarounMaroun,我没找到你
-
我的意思是
Child不一定是Parent,这不是继承的好例子。 -
@MarounMaroun,好的,我只是想看看在继承中隐藏变量的行为。
标签: java