gpt4 book ai didi

java - 静态字段覆盖在 Java 7 中工作得很好

转载 作者:行者123 更新时间:2023-11-30 10:56:43 28 4
gpt4 key购买 nike

我试图理解 Java 中的静态变量,我看到的是以下行为

public class TestParent {
protected static String name = "parent";
}

public class TestChild extends TestParent{
public TestChild(){
super.name="child";
}
}

现在如果

TestParent tp = new TestParent();

输出:

parent

否则如果,

TestParent tp = new TestChild();

输出: child

有人可以向我解释到底发生了什么吗?我知道这个问题听起来很简单,但我无法理解原因。

谢谢。

最佳答案

静态字段从不附加到实例而不是类。他们只需要键入即可访问。

由于 super 引用了 TestParent 类型,看起来您正在重写它,但您也可以从 Child 外部使用它的类名 (TestParent) 执行此操作.

简而言之,访问静态字段只需要类型,不需要实例。例如

TestParent test = null;
System.out.println(test.name);

之所以可行,是因为测试类型是 TestParent,它会在该类型上调用 name

Why does Java compiler allow static variable access through null object?

更新您的问题更新:

当你执行 TestParent tp = new TestChild();

您正在调用子类构造函数,并且在您正在执行的那个构造函数中

 super.name="child";

因此将 name 的值更改为 child

虽然您在子类中进行更改,但由于静态变量绑定(bind)到父类而不是实例,您可以看到所有实例的更改。

关于java - 静态字段覆盖在 Java 7 中工作得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900476/

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