我有一个涉及创建从超类继承方法和变量的不同类型的对象的项目,但是当我尝试更改子类中的变量(通过构造函数输入的值)时,变量保持与初始化的值相同在超级班.
这是超级变量之一:
public int grade = 0;
这就是子类中发生的事情(newGrade来自构造函数).
System.out.println(newGrade); newGrade = grade; System.out.println(grade);
输出显示newGrade = 1(或任何选定的)但等级= 0
我不确定它是否简单或我忽略了什么,但我会感激任何提示.
您从右到左分配.所以你在这里做的是打印出来newGrade
(这是1)然后分配它grade
是0然后你打印出来grade
仍然是0.
这里有几个问题:
public int grade = 0;
这很麻烦.java指南声明你应该使用private
变量(如果可能的话,根本不使用实例变量).这样你就无法确保团队中的其他(可能是粗心的)程序员不会篡改grade
.
newGrade = grade;
由于只将引用的副本传递给方法/构造函数,因此如果您尝试重新分配它们的值,则会出现问题.它不会反映到原始对象.