目录

谈谈枚举


如果一个类的对象个数是有限的而且是不变的,我们通常将这样的类设计成枚举类。


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