方法一
public enum Operation { plus,minus,times,divide; double eval (double x,double y){ switch (this) { case plus: return x + y; case minus: return x - y; case times: return x * y; case divide: return x / y; default: return 0; //此部分代码其实没有必要。因为this代表的枚举类只有四个枚举值。 //但是如果不加上的话,会编译报错。 } } String describ (){ return "i am a "+this+" method"; } public static void main(String[] args) { System.out.println(Operation.plus.eval(3,4)); //理解为枚举值的方法。而不是枚举类方法。 System.out.println(Operation.minus.describ()); } } 方法二
public enum Operation2 { plus{ public double eval(double x,double y){ return x+y; } },//这个抽象方法在下面有声明。写法可以参照匿名内部类 minus{ public double eval(double x,double y){ return x-y; } }, times{ public double eval(double x,double y){ return x*y; } }, divide{ public double eval(double x,double y){ return x/y; } }; abstract double eval(double x,double y); public static void main(String[] args) { System.out.println(Operation2.plus.eval(3,4)); } } 方法二写法可以参考匿名内部类的写法,
另外注意的是并不是所有的枚举类都使用了final修饰符,从而导致其不能派生子类。只有非抽象的枚举类才是用final修饰,
而对于抽象的枚举类而言,其只要包含了抽象方法,其就是抽象枚举类,系统会默认使用abstract 修饰,而不会用final