Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我不能用这个程序重新分配父变量?_Java_Inheritance_This_Variable Assignment_Super - Fatal编程技术网

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

Java 为什么我不能用这个程序重新分配父变量?,java,inheritance,this,variable-assignment,super,Java,Inheritance,This,Variable Assignment,Super,成功建成并运行;然而结果是 package accesslevelmodifiers; public class AccessLevelModifiers { public static void main(String[] args) { Parent parent =new Parent(); Subclass subclass = new Subclass(); parent.go(); subclass.go(); System.o

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

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;
    }


}
我被两件事弄糊涂了。 1.为什么我可以在子类中使用super.NumberPu?我是说如果我写

 100
 100
 ===========
 100
 3
IDE会说找不到符号

我使用了super,所以我认为parent中NumberPu的值将被赋值为3,但实际上是子类中的值被赋值。谁能告诉我发生了什么事?为什么是超级。变成了这个? 非常感谢你! 这里有两个不同的对象,所以当你改变其中一个的数量时,另一个不会改变,因为它们是不相关的

看看你是怎么用新的?新操作符通过为新对象分配内存并返回对该内存的引用来实例化类。所以你有两段完全不相关的记忆

例如,您可以将声明放在类级别,以便将新变量添加到子类中,而不是语句中。在这里,您并不是在声明一个新变量,而是在为现有变量赋值,所以应该在构造函数中完成,这很好。 您混淆了类和实例。父对象和子类对象是两个不同的实例,修改一个不会影响另一个,它们是两个具有不同成员字段实例的不同对象。super是一种在出现歧义时引用super类中的字段的方法,这是引用当前实例,因此它们处于两个不同的级别。
你认为这里有多少个对象,是什么类型的?我这里有两个实例父类和子类,我有两个对象父类中的NumberPuint type和子类中的NumberPuint type。我说得对吗?你说得不对。此新父对象创建父类型的对象。这个新的子类创建一个Subclass类型的对象。这两个对象都可以访问自己的NumberPu字段。感谢您的解释!!这里有两个对象,分别属于父类和子类。对象父类是父类的实例,而对象子类是子类的实例。我想这听起来更好??谢谢你的回答!我理解在构造函数中为现有值赋值的含义。但是我还是不明白super.NumberPu指的是什么?在你的例子中,super.NumberPu和this.NumberPu指的是同一件事:在子类的超类中为当前实例定义的字段NumberPu。因此,我可以说在对象子类中,只有一个名为NumberPu的字段。NumberPu由两个类共享:父类,声明它的类。子类,从父类继承它的那个?因此,当我重新分配NumberPu的值时,我是否使用它并不重要。或者超级。因为它们都是指唯一的一个?谢谢你的回答!我明白你的意思了@奥斯卡:没问题!请记住,如果我的答案回答了您的问题,请将我的答案作为解决方案,以便与您有问题的其他人知道答案:。
class Subclass extends Parent{
        super.NumberPu = 3;   
}
Parent parent =new Parent();
Subclass subclass = new Subclass();