enum关键字与class和interface地位相同,其一样有成员变量、方法、可以实现一个或多个接口,也可以有构造器
枚举类与普通类的区别
- 枚举类的父类是java.lang.Enum类
- 非抽象枚举类默认使用final修饰,不能存在子类
- 枚举类的构造器只能使用private修饰符,默认就是private
- 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远不能产生实例,列出的实例,系统会自动添加public static final修饰
抽象的枚举类,系统默认使用abstract修饰,而不用final修饰
1 | package com.em; |
枚举值就代表可能会产生的实例
1 | package com.em; |
为什么使用枚举类?
- 存在命名空间,可以将其他的静态常量区分开
- 打印输出的意义明确,不想普通常量那样,都用数字表示含义,无法直接表达含义
枚举类方法
- compare(E o):用于与指定的枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数
- name():返回此枚举实例的名称
- ordinal():返回枚举值在枚举类中的索引值(从0开始)
- toString():与name方法一致,推荐使用toString
- valueOf():一个静态方法,用于返回指定枚举类中指定名称的枚举值
1 | package com.em; |
实现接口的枚举类
枚举类实现接口,与正常类没有什么区别
1 | package com.em; |
包含抽象方法的枚举类
枚举类里定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(因为系统自动会添加abastract),但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则出现编译错误
1 | package com.em; |