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