gpt4 book ai didi

java - 在java中使用父引用类型访问变量

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:27 25 4
gpt4 key购买 nike

我创建了 2 个类 - ParentChild , 都是这样的:

Parent.java

public class Parent {
String name = "Parent";
}

Child.java

public class Child extends Parent {
String name = "Child";
}

子类正在隐藏父类实例变量 name .

我创建了一个这样的主程序:

测试.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 .

我的理解是这样的,我创建了一个引用变量pc类型 Parent但它指向 Child反对我的程序。所以在程序的运行时,java 在堆内存中为子类创建一个对象,因为子类正在隐藏 name。变量,pc.name 的输出将是 Child .但是根据程序,我的理解是不正确的,这个概念只适用于被子类覆盖的方法。

您能解释一下为什么实例变量与方法不同吗?

最佳答案

没有覆盖实例变量。

您的 Child 类有两个 name 实例变量。 Child 类中的一个隐藏了 Parent 类中的一个(顺便说一句,它们不必都是同一类型)。

当您通过Parent 引用访问name 时,您将获得Parent 类的name 变量。当您通过 Child 引用访问 name 时,您将获得 Child 类的 name 变量。

关于java - 在java中使用父引用类型访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com