枚举类:包含抽象方法的枚举类
程序员文章站
2022-05-21 21:42:21
...
package org.lgy.study.enumstudy; public enum Operation{ PLUS,MINUS,MULTI,DIVIDE; public double eval(double a, double b){ switch(this) { case PLUS: return a + b; //因为前面有return语句,所以后面的break语句永远不会被执行 //break; case MINUS: return a - b; //break; case MULTI: return a * b; //break; case DIVIDE: return a / b; //break; //从java语法的角度来看,因为该方法有返回值,所以default语句是必须的 //但从实际的语义来看,因为this代表的是枚举类的实例,而枚举类的实例是固定的, //所以default语句是完全多余的 default: return 0.0; //break; } } public static void main(String[] args){ for(Operation o : Operation.values()){ System.out.println(o.eval(1, 2)); } } }
package org.lgy.study.enumstudy; /* 枚举类里定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(因为系统自动会为它添加abstract关键字),但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出现编译错误。 */ public enum Operation{ PLUS { public double eval(double a, double b){ return a + b; } }, MINUS { public double eval(double a, double b){ return a - b; } }, MULTI { public double eval(double a, double b){ return a * b; } }, DIVIDE { public double eval(double a, double b){ return a / b; } }; //为枚举类定义一个抽象方法 //这个抽象方法由不同的枚举值提供实现 public abstract double eval(double a, double b); public static void main(String[] args){ for(Operation o : Operation.values()){ System.out.println(o.eval(1, 2)); } } }