为什么我不能用这个程序重新分配父变量?

Why can't I re-assign the parent's variable with this program?

package accesslevelmodifiers;

public class AccessLevelModifiers {

    public static void main(String[] args) {

    Parent parent =new Parent();
    Subclass subclass = new Subclass();
    parent.go();
    subclass.go();

    System.out.println("===========");

    subclass.setNumberPu(3);
    parent.go();
    subclass.go();
    }
}


public class Parent {

    public int NumberPu=100;

    public void go(){
        System.out.println(NumberPu);
    }
}

class Subclass extends Parent{

    public void setNumberPu(int NumberPu) {
        super.NumberPu = NumberPu;
    }


}

构建成功运行;然而结果是

 100
 100
 ===========
 100
 3

我对两件事感到困惑。 1.Why 我可以在子类中使用 super.NumberPu 吗?我的意思是如果我写

class Subclass extends Parent{
        super.NumberPu = 3;   
}

IDE 会说找不到符号。

  1. 我使用了 super 所以我认为父类中的 NumberPu 的值将被分配为 3,但它是子类中的值被分配的。谁能告诉我发生了什么事?怎么超。变成了这个? 非常感谢!

你这里有两个不同对象,所以当你改变其中一个的数量时,另一个不会改变,因为它们不相关.

Parent parent =new Parent();
Subclass subclass = new Subclass();

看看您是如何使用这里的 new 的? new 运算符通过为新对象分配内存并返回对该内存的引用来实例化 class。所以你有两个完全不相关的内存。

  1. 您可以在 class 级别放置声明(例如,将新变量添加到您的子 class),但不能放置语句。这里你没有声明一个新变量,你给一个现有的变量赋值,所以它应该在构造函数中完成,没关系。
  2. 您混淆了 classes 和实例。你的 parent 和你的 subclass 对象是两个不同的实例,修改一个不会影响另一个,它们是两个不同的对象,具有不同的成员字段实例。 super 是一种在歧义的情况下引用超级 class 字段的方法,this 是引用当前实例,因此它们处于两个不同的级别。