Java枚举Season报错修复及需求实现技术咨询
解决枚举类Season的抽象方法编译错误
错误提示
Season不是抽象类,且未重写Season中的抽象方法printMonths()
需求回顾
编写一个名为Season的枚举,包含4个常量:WINTER、SPRING、SUMMER、FALL,要求:
- 包含
averageTemperature的final字段,通过构造方法初始化并提供getter方法 - 包含抽象方法
printMonths(),用于显示对应季节的月份 - 遍历枚举所有值,显示季节名称、平均温度和对应月份
原代码问题分析
原代码存在两个核心问题:
- 抽象方法
printMonths()被错误添加了方法体,抽象方法不允许有具体实现 - 枚举类定义了抽象方法,但每个枚举常量未实现该方法,违反枚举类规则——枚举常量必须实现类中所有抽象方法
修正后的代码
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
相关产品推荐
相关产品推荐

