为什么我不能用这个程序重新分配父变量?
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 会说找不到符号。
- 我使用了 super 所以我认为父类中的 NumberPu 的值将被分配为 3,但它是子类中的值被分配的。谁能告诉我发生了什么事?怎么超。变成了这个?
非常感谢!
你这里有两个不同对象,所以当你改变其中一个的数量时,另一个不会改变,因为它们不相关.
Parent parent =new Parent();
Subclass subclass = new Subclass();
看看您是如何使用这里的 new
的? new
运算符通过为新对象分配内存并返回对该内存的引用来实例化 class。所以你有两个完全不相关的内存。
- 您可以在 class 级别放置声明(例如,将新变量添加到您的子 class),但不能放置语句。这里你没有声明一个新变量,你给一个现有的变量赋值,所以它应该在构造函数中完成,没关系。
- 您混淆了 classes 和实例。你的 parent 和你的 subclass 对象是两个不同的实例,修改一个不会影响另一个,它们是两个不同的对象,具有不同的成员字段实例。
super
是一种在歧义的情况下引用超级 class 字段的方法,this
是引用当前实例,因此它们处于两个不同的级别。
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 会说找不到符号。
- 我使用了 super 所以我认为父类中的 NumberPu 的值将被分配为 3,但它是子类中的值被分配的。谁能告诉我发生了什么事?怎么超。变成了这个? 非常感谢!
你这里有两个不同对象,所以当你改变其中一个的数量时,另一个不会改变,因为它们不相关.
Parent parent =new Parent();
Subclass subclass = new Subclass();
看看您是如何使用这里的 new
的? new
运算符通过为新对象分配内存并返回对该内存的引用来实例化 class。所以你有两个完全不相关的内存。
- 您可以在 class 级别放置声明(例如,将新变量添加到您的子 class),但不能放置语句。这里你没有声明一个新变量,你给一个现有的变量赋值,所以它应该在构造函数中完成,没关系。
- 您混淆了 classes 和实例。你的 parent 和你的 subclass 对象是两个不同的实例,修改一个不会影响另一个,它们是两个不同的对象,具有不同的成员字段实例。
super
是一种在歧义的情况下引用超级 class 字段的方法,this
是引用当前实例,因此它们处于两个不同的级别。