enum类,有一个readObject方法,直接抛出异常,避免被序列化生成对象,而枚举类继承enum,而且私有化构造方法外部不能调用,而且用反射里面用构造方法生成对象的时候会检测如果是枚举类则抛出异常。所以枚举类是实现单例的最保险形式(太严格和复杂了点);
枚举类型其实是一个普通的类(可以是抽象类和具体类),自己类型的静态常量,在类初始化的时候,根据参数实例化一个对象赋值给自己。
然而,既然是普通类,就会有方法,如果在枚举类型后面不仅有参数列表,还有实现的方法,那么虚拟机生成的类,是一个抽象类(一个继承了抽象类enum的抽象类),有同名的抽象方法。
如果没有实现的方法,那么虚拟机生成的类是一个final的具体类,不能被继承。