You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承问题:PremiumSugarSmashPlayer数组长度未达预期(应为50却仅到10)

解决PremiumSugarSmashPlayer数组长度仅为10的问题

看起来你在SugarSmash的继承作业里踩了个常见的继承坑——Premium子类的高分数组没能如愿设成50长度,反而继承了父类的10长度对吧?别慌,这大概率是继承时没有正确覆盖父类的数组初始化逻辑导致的,我给你拆解几个最常见的场景和修复方案:

场景1:父类定义了固定长度的数组,子类未重新初始化

咱先假设你的SugarSmashPlayer是这么写的:

public class SugarSmashPlayer {
    protected int[] highScores = new int[10]; // 父类固定10长度
    // 其他游戏相关方法...
}

如果PremiumSugarSmashPlayer只是单纯继承,没有重新处理这个数组,那它会直接沿用父类的10长度数组。这时候你只需要在子类里重新初始化数组就行:

public class PremiumSugarSmashPlayer extends SugarSmashPlayer {
    // 方案一:直接重新定义数组,覆盖父类成员
    protected int[] highScores = new int[50];

    // 或者方案二:在构造方法里重新赋值
    public PremiumSugarSmashPlayer() {
        highScores = new int[50];
    }
    // 你的Premium专属功能代码...
}

⚠️ 注意:如果父类的highScores是private修饰的,子类没法直接访问,这时候你得在父类里加个protected的方法来初始化数组,或者在子类里定义自己的专属数组(不过要避免和父类成员重名导致混淆)。

场景2:父类有初始化数组的方法,子类未重写

要是父类是通过专门的方法来初始化数组的,比如这样:

public class SugarSmashPlayer {
    protected int[] highScores;

    public SugarSmashPlayer() {
        initializeHighScores();
    }

    protected void initializeHighScores() {
        highScores = new int[10];
    }
}

那问题就出在子类没重写这个初始化方法!父类构造会调用自己的initializeHighScores(),所以数组还是10长度。你只需要在子类里重写这个方法:

public class PremiumSugarSmashPlayer extends SugarSmashPlayer {
    @Override
    protected void initializeHighScores() {
        highScores = new int[50];
    }
    // 其他Premium代码...
}

这样子类实例化时,就会执行自己的初始化逻辑,创建50长度的数组了。

场景3:数组长度用父类常量定义,子类未修改

如果父类用常量来控制数组长度:

public class SugarSmashPlayer {
    protected static final int MAX_LEVELS = 10;
    protected int[] highScores = new int[MAX_LEVELS];
}

这时候你需要在子类里重新定义这个常量,再初始化数组:

public class PremiumSugarSmashPlayer extends SugarSmashPlayer {
    protected static final int MAX_LEVELS = 50;
    protected int[] highScores = new int[MAX_LEVELS];
}

(注:static final常量是类级别的,子类的常量是独立于父类的,所以不会互相影响)

快速验证方法

你可以在PremiumSugarSmashPlayer里加个小方法来验证数组长度:

public void checkArrayLength() {
    System.out.println("当前高分数组长度:" + highScores.length);
}

然后在DemoSugarSmash里实例化一个Premium对象,调用这个方法,就能确认是不是已经改成50啦。

内容的提问来源于stack exchange,提问作者user9555434

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:14:54