枚举是一种特殊的类,这个类被final修饰,同时继承(extends)了java.lang.Enum类。故枚举不能继承和被继承。
枚举定义的成员变量都是由public static final修饰的、该枚举类型的常量(枚举对象),并默认调用无参构造器(没有括号)。
public enum Gender {
MALE, FEMALE;
// 相当于public static final MALE = new Gender();
}
枚举的构造器默认由private修饰(也可以改为(default)),故不能在类外实例化枚举对象——因此与对象有关的范型与其无关。构造器可以被重载。
枚举对象默认具有valueOf()方法(通过一个字符串可以返回枚举对象,这个字符串参数就是枚举对象的名字)和values(String str)方法(可以返回这个枚举类型的所有对象,返回类型是数组)。
枚举对象的toString()方法会默认返回变量的变量名。
枚举可以实现一个接口,也可以实现自己的抽象方法(自己的抽象方法也只能被自己实现)。可以在枚举中统一实现,也可以在对象中单独实现。
public enum Gender implements Action{
MALE(){
@Override
public void run() {
System.out.println("MALE对象中,单独实现接口中的抽象方法");
}
}, FEMALE(){
@Override
public void run() {
System.out.println("FEMALE对象中,单独实现接口中的抽象方法");
}
};
@Override
public void run() {
System.out.println("枚举中统一实现接口中的抽象方法");
}
}
interface Action{
void run();
}
在项目中,只要一个类型的对象个数和名称能固定下来的,就可以考虑使用枚举类型来表示。枚举常用于switch语句、异常类、项目常量中。