Java枚举抽象方法实战

需求背景

   需求已经确定了几个固定的常量值,并且每个常量值都有相同的行为,但是具体实现细节不同。建议使用枚举抽象方法,优点:结构清晰,便于扩展。

枚举类实现抽象方法

   与常规抽象类一样,enum类允许我们为其定义抽象方法,然后使每个枚举实例都实现该方法,以便产生不同的行为方式,注意abstract关键字对于枚举类来说并不是必须的,举个栗子:

复制代码
public enum GradeEnum {
    //考试分数划分为A、B、C、D和E 五个等级
    A("90~100") {
        @Override
        public String getGrade(String studentName) {
            return studentName + "优秀";
        }
    }, B("80~89") {
        @Override
        public String getGrade(String studentName) {
            return studentName + "良好";
        }
    }, C("70~79") {
        @Override
        public String getGrade(String studentName) {
            return studentName + "中等" + getScore();
        }
    }, D("60~69") {
        @Override
        public String getGrade(String studentName) {
            return studentName + "及格";
        }
    }, E("0~59") {
        @Override
        public String getGrade(String studentName) {
            return studentName + "成绩很差";
        }
    };
    private String score;

    private GradeEnum(String score) {
        this.score = score;
    }

    public String getScore() {
        return this.score;
    }

    public abstract String getGrade(String studentName);
}
复制代码

   定义GradeEnum的时候,并未添加abstract关键字。

   可以把 enum 类看成是一个普通的类,枚举类都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。 

   成员方法可以直接操作成员变量,比如score,并且得到返回结果,静态方法是遍历各个实例使用其成员变量计算得到返回结果,方法过程都是根据成员属性进行计算。

如果我们想让各个实例拥有完全不一样的方法实现,不依赖于成员变量,那么,需要定义抽象方法,实例使用{...}匿名块,在匿名块中实现抽象。如上述例子中的抽象方法getGrade。也可以通过枚举类实现接口来达到相同的目的。

 

posted @   楼兰胡杨  阅读(5533)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示