当前位置: 首页 > 知识库问答 >
问题:

在超类和子类之间区分变量[duplicate]

翟黎明
2023-03-14

我正在开发一个程序,允许用户在四支球队之间选择主客场足球队。我创建了一个通用的超类团队,它定义了每个安全/场球/达阵得分分配的点数。生成一个随机数,然后根据该数字,程序执行条件if/else语句,以确定动作和点。

这是在超类中:

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。我在我的超类中有这样的设置,然而,当程序运行时,它将整个游戏的分数相加,而不区分队伍。

客场团队行动。射门得分+3当前得分:3

主队行动。射门得分+3当前得分:6

客场团队行动。射门得分+3当前得分:9

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

对如何解决这个问题有什么想法吗?我想跟踪每个团队的totalscore。谢谢你!

共有1个答案

利博远
2023-03-14

如果您希望在每个团队级别跟踪,那么您应该将其定义为成员变量,以便每个团队都有自己的totalscore字段副本。

在超类中有一个statice字段意味着它始终是在子类中发生的所有操作的总聚合。因为每个类只维护static字段的一个副本。在您的例子中,您已经在超类中定义了它,这使得它成为一个用于分数聚合的全局字段。

 类似资料:
  • 问题内容: 我已经在Python的Stack Exchange上阅读了很多答案,为什么在类中使用“ self”? 阅读这些答案后,我了解到实例变量对于该类的每个实例都是唯一的,而在所有实例之间共享类变量。 在玩耍时,我发现这段代码给出了输出: 但是,此代码作为输出,在我看来应为: 为什么我运行时类变量没有更新?我没有编程方面的经验,所以请原谅。 问题答案: 类变量 被 实例属性 遮盖 。这意味着在

  • 我在Java中读到了关于将超类变量类型化为子类的知识,反之亦然。请告诉我哪些是有效的? 动物是超级类,有猫和狗子类。

  • 我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。

  • 问题内容: 一本书的引用: 如果要从超类的变量引用的对象中调用由子类定义的方法,该怎么办?假定SoftBall类具有一个名为BallBall类未定义的方法riseBall。如何从Ball变量中调用它?一种方法是创建子类的变量,然后使用赋值语句强制转换对象: 在上面的代码片段中,它显示了一个新的 Softball 对象,该对象正在创建并分配为对变量 b 的引用,这是完全合法的,因为类 Softbal

  • 在上面的代码片段中,它显示了一个新的Switterball对象被创建并赋值为变量b的引用,这是完全合法的,因为Switterball类是Ball类的子类。但是引号(间接地)指出,在使用该变量从垒球类调用方法之前,必须将该变量强制转换为垒球类型。为什么会这样?为什么我不能直接使用Ball类型的变量b(它包含对垒球对象的引用)来调用所需的方法?变量b已经有了对象。 (注:我已经读过这篇文章了。)

  • 我得到了这个错误: “变量'a'已赋值,但其值永远不可用”