Java SuperClass超过编写子类变量

时间:2013-11-29 14:40:18

标签: java inheritance global-variables

我有一个涉及创建不同类型的对象的项目,这些对象从超类继承方法和变量,但是当我尝试更改子类中的变量(通过构造函数输入的值)时,变量保持相同的值它被初始化为超类。

这是超级变量之一:

public int grade = 0;

这就是子类中发生的事情(newGrade来自构造函数)。

System.out.println(newGrade);
newGrade = grade;
System.out.println(grade);

输出显示newGrade = 1(或选择的任何内容)但等级= 0

我不确定它是否简单或我忽略了什么,但我会很感激任何提示。

1 个答案:

答案 0 :(得分:6)

您从右向左分配。所以你在这里做的是打印newGrade(这是1) 然后将其分配为grade,即0,然后打印出grade,它仍为0。

这里有几个问题:

public int grade = 0;

这很麻烦。 java准则声明您应该使用private个变量(如果可能的话,根本不使用实例变量)。这样您就无法确保团队中的其他(可能是粗心的)程序员不会篡改grade

newGrade = grade;

由于只有引用的副本传递给方法/构造函数,因此如果您尝试重新分配它们的值,则会出现问题。它不会反映到原始对象。