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

Java枚举Season报错修复及需求实现技术咨询

解决枚举类Season的抽象方法编译错误

错误提示

Season不是抽象类,且未重写Season中的抽象方法printMonths()

需求回顾

编写一个名为Season的枚举,包含4个常量:WINTER、SPRING、SUMMER、FALL,要求:

  • 包含averageTemperature的final字段,通过构造方法初始化并提供getter方法
  • 包含抽象方法printMonths(),用于显示对应季节的月份
  • 遍历枚举所有值,显示季节名称、平均温度和对应月份

原代码问题分析

原代码存在两个核心问题:

  1. 抽象方法printMonths()被错误添加了方法体,抽象方法不允许有具体实现
  2. 枚举类定义了抽象方法,但每个枚举常量未实现该方法,违反枚举类规则——枚举常量必须实现类中所有抽象方法

修正后的代码

public enum Season {
    WINTER(-5.0, new String[]{"December", "January", "February"}) {
        @Override
        public void printMonths() {
            printMonthArray(this.months);
        }
    },
    SPRING(15.0, new String[]{"March", "April", "May"}) {
        @Override
        public void printMonths() {
            printMonthArray(this.months);
        }
    },
    SUMMER(25.0, new String[]{"June", "July", "August"}) {
        @Override
        public void printMonths() {
            printMonthArray(this.months);
        }
    },
    FALL(10.0, new String[]{"September", "October", "November"}) {
        @Override
        public void printMonths() {
            printMonthArray(this.months);
        }
    };

    private final double averageTemperature;
    private final String[] months;

    Season(double averageTemperature, String[] months) {
        this.averageTemperature = averageTemperature;
        this.months = months;
    }

    // 抽象方法定义,无方法体
    public abstract void printMonths();

    public double getAverageTemperature() {
        return averageTemperature;
    }

    public void printInfo() {
        System.out.println("Season: " + this.name());
        System.out.println("Average temperature: " + this.getAverageTemperature() + " degrees Celsius");
        System.out.print("Months: ");
        this.printMonths();
        System.out.println();
    }

    // 提取公共打印逻辑,避免重复代码
    private void printMonthArray(String[] months) {
        for (int i = 0; i < months.length; i++) {
            System.out.print(months[i]);
            if (i != months.length - 1) {
                System.out.print(", ");
            }
        }
    }

    // 测试遍历枚举的主方法
    public static void main(String[] args) {
        for (Season season : Season.values()) {
            season.printInfo();
        }
    }
}

修正要点说明

  • 将printMonths()抽象方法移至枚举常量下方,移除方法体,符合抽象方法定义规范
  • 每个枚举常量通过匿名内部类实现printMonths()方法,调用公共打印逻辑输出月份
  • 新增printMonthArray()私有方法,复用月份打印逻辑,减少代码冗余
  • 添加main()方法实现枚举遍历,满足需求中的遍历显示要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:12