区分超类和子类之间的变量

时间:2015-12-13 14:49:18

标签: java class inheritance subclass superclass

我正在开发一个程序,允许用户在四个团队之间选择一个主客场足球​​队。我创建了一个通用的超类团队,定义了每个安全/现场目标/触地得分所分配的点数。生成随机数,然后基于该数字,程序逐步通过条件if / else语句来确定动作和点。

这是在SuperClass中:

public void possessionPoints()
{
    if(points<lowNopoints){
        score = noPoints;
        totalScore = totalScore + score;
        System.out.println("No points, plus " + score);
    }
    else if(points<lowSafetypoint){
        score = safetyPoint;
        totalScore = totalScore + score;
        System.out.println("Safety, plus" + score);
    }
    else if(points<lowFieldgoal){
        score = fieldGoal;
        totalScore = totalScore + fieldGoal; 
        System.out.println("Field goal, plus" + score);
    }
    else{
        score = touchDown;
        totalScore = totalScore + touchDown;
        System.out.println("Touchdown, plus" + score);
    }

    ArrayList<Integer> totalScore;
    totalScore = new ArrayList<>();
    totalScore.add(score);

    //the sum score
    int sum = totalScore.stream().mapToInt(Integer::intValue).sum();
    System.out.println("Current score is: " + sum);
}

注意:上面的totalScore已初始化为public static int totalScore = 0;

在整个过程中,我想跟踪totalScore。我在我的超类中有这个设置,但是,当程序运行时,它会在整个游戏中累加得分并且不区分团队。

  

输出:

     

主队采取行动。    没有积分,再加上0    当前得分:0

     

离开团队行动。    射门得分,加上3    目前得分:3

     

主队采取行动。    射门得分,加上3    目前得分:6

     

离开团队行动。    射门得分,加上3    目前得分:9

     

主队采取行动。    安全,加2    当前得分:11

此外,如果它有帮助,这就是我在下面其他团队的每个子类中设置的所有内容。我对totalScore没有做任何事情。

public class PackersSub extends GenericSuper{
public PackersSub()
{
    lowNopoints = 4;
    lowSafetypoint = 5;
    lowFieldgoal = 7; 
}

有关如何解决此问题的任何想法?我想跟踪每个团队totalScore。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您希望按团队级别进行跟踪,则应将其定义为成员变量,以便每个团队都拥有自己的totalScore字段副本。

在超类中提交static意味着它将始终是子类中发生的所有操作的总聚合。因为每个类只维护一个static字段的副本。在您的情况下,您已在超类中定义它,这使其成为分数聚合的全局字段。