在Java中,enum(枚举类型)被定义为类,继承自Enum类。当然,也继承了Object类。所以enum定义的变量也可以使用它们的方法。可以看下面的代码:
public class EnumDemo {
// 枚举定义为类型,自动继承自Enum类
// 不能再继承其他类或被其他类继承
enum Pet {
DOG, CAT, PIG, FISH, BIRD, MOUSE(100), ;// 每个枚举常量都是它的对象
private int price;
Pet() {
} // 可以像其他类一样实现构造函数,只能是private不可以用public,protected修饰
private Pet(int price) {
this.price = price;
}
public int getPrice() {// 也可以定义方法
return price;
}
}
/**
* @param args
*/
public static void main(String[] args) {
Pet p = Pet.valueOf("MOUSE");// valueOf方法的使用
for (Pet pet : Pet.values()) {// values方法的使用,返回的是一个Pet类型的数组
System.out.println(pet);
}
System.out.println();
System.out.println(p.equals(Pet.BIRD));//可以像其他类型一样调用方法
System.out.println();
System.out.println(p + " " + p.getPrice());
}
}
因为enum是一种类型,所以可以提供构造函数
Pet() {
}
添加实例变量
private int price;
和添加方法
public int getPrice() {// 也可以定义方法
return price;
}
另外它(enum)有两个预定义方法values()和valueOf()。
values()返回一个包含枚举常量列表的数组,
valueOf(String str)返回与str的字符串相对应的枚举常量。如
Pet p = Pet.valueOf("MOUSE");
p对应 的就是MOUSE。
以上代码的运行结果是:
DOG
CAT
PIG
FISH
BIRD
MOUSE
false
MOUSE 100
需要说明的是,与其他类型相比,eunm类型不能使用new实例化,也不能继承其他类,也不能是超类。也就是说它(enum)不能扩展。但可以实现接口。
enum不能继承其他类型,但它自动继承Enum类。
再有一点就是枚举的每个常量都是定义它的类的对象。
DOG, CAT, PIG, FISH, BIRD, MOUSE(100)
MOUSE(100)调用的是Pet(int price)
并且它们(枚举常量)都被隐式的声明为公有、静态final成员。
最后这几点希望大家留意。