枚举类
枚举类
概念:
枚举类型:可以把有固定格式的一些数据定义为枚举类型,它的数量是有限并且固定的。比如一周有7天,一年有4个季节一样,一个小时有60分钟等,都是有限的并且固定的数据。比如一周有七天,分别是Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday。如果我们可以用整数0、1、2、3、4、5、6来表示这七天,那么多下来的那些整数该怎么办?而且这样的设置很容易让数据出错,即取值超出范围。我们能否自创一个数据类型,而数据的取值范围就是这七天呢?枚举类就是干这个的,我可以定义一个枚举类型可以用0-6来代表这7天,或者用1-7随你便,这个枚举中就只有这7个数字了。这就是枚举。
语法:
枚举类跟普通类一样也是类,只要把class换成enum就是枚举类了。
特点:
a) 定义枚举类时先要在第一行声明枚举值,权限默认强制就是public static final,多个枚举值用逗号做分隔符。枚举值其实就是这个枚举类创建的对象。比如Season枚举类中 SPRING,SUMMER 2个枚举值,其实就是 public static final SeasonSPRING =new Season(形参列表)。另一个SUMMER也是这个格式的对象。
b) 枚举类的构造器只能强制使用private权限,可以省略不写。
c) 枚举类本身强制使用final修饰符修饰,final类不能被继承,所以不能产生子类。
d) 枚举类不是普通类,所以它没有继承java.lang.Object类,它继承的是 java.lang.Enum类。
例子均参考自本人看书并做的笔记《某Java书籍》
例子:枚举值展开形式:
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;}};//下面报错,因为枚举值是一个对象,抽象类中不能new对象。//DIVIDE//枚举类中定义抽象方法,这个枚举类就会变成抽象类。定义了抽象方法后就必须用匿名内部类的方法去实现抽象方法。 public abstract double eval(double x, double y);public static void main(String[] args){System.out.println(Operation2.PLUS.eval(3, 4));System.out.println(Operation2.MINUS.eval(5, 4));System.out.println(Operation2.TIMES.eval(5, 4));//System.out.println(Operation2.DIVIDE.eval(5, 4));}}