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();