【Java基础】关于枚举类你可能不知道的事
目录
谈谈枚举
如果一个类的对象个数是有限的而且是不变的,我们通常将这样的类设计成枚举类。
1. 枚举类的定义
枚举类有如下特点:
- 枚举类默认是使用final关键字修饰的,所以枚举类不能被继承;
- 枚举类的构造函数默认是使用private修饰的;
- 定义枚举类时所有实例必须在第一行全部列出;
- 枚举类也可以实现接口;
- 枚举类可以包含抽象方法。
//默认final修饰,不能被继承 public enum EnumDemo implements Runnable { //枚举的字段必须加注释 //男性 MALE("male"){ @Override //这边每个枚举类都单独实现了接口方法,也可以统一实现 //在枚举类的定义中实现一个就好了 public void run() { System.out.println("l like run..."); } @Override public void tellSex() { System.out.println("l am a man"); } }, //女性 Female("female"){ @Override public void run() { System.out.println("l hate running..."); } @Override public void tellSex() { System.out.println("l am a girl"); } }; private String sex; public String getSex(){ return sex; } /** * 构造函数默认是priva的 * @param sex */ EnumDemo(String sex){ this.sex = sex; } /** * 抽象方法,需要枚举类实例实现这个方法 */ public abstract void tellSex(); }
2. 枚举类的底层实现
假如有如下的一个枚举类定义
public enum T { SPRING,SUMMER,AUTUMN,WINTER; }
经过Java编译器编译后,如果我们反编译class文件可以看到如下代码:
public final class T extends