关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。这是一种非常有用的功能。
1.基本的enum特性:
枚举类的valueOf()静态方法返回枚举实例数组;
枚举实例的ordinal()方法返回int值,是此实例在声明时的次序,从0开始;
枚举实例的getDeclaringClass()方法返回此枚举实例所在的枚举类名称;
枚举实例的name()方法返回此枚举实例声明时的名称,与使用toString()方法效果相同;
2.向enum中添加新方法:
如果你打算定义自己的方法,那么必须在enum实例序列的最后添加一个分号。同时,java要求你必须先定义enum实例。否则将编译出错。枚举中的构造器与方法和普通的类没有区别,除了有少许的限制外,enum就是一个普通的类。
3.覆盖enum的方法:
toString()方法通过调用name()方法取得SpaceShip的名字,然后将其修改为只有首字母大写的格式。
4.使用接口组织枚举:
在一个接口的内部创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。
对enum而言,实现接口是使其子类化的唯一办法,所以嵌入在Food中的每个enum都实现了Food接口。
如果enum类型实现了Food接口,那么我们就可以将其实例向上转型为Food,所以上例中的所有东西都是Food。
5.常量相关的方法:
enum有个非常有趣的特性,它允许程序员为enum实例编写方法,从而为每个enum实例赋予各自不同的行为。要实现常量相关的方法,你需要为enum定义一个或多个abstract方法,然后为每个enum实例实现该抽象方法。参考下面的例子:
在面向对象的程序设计中,不同的行为与不同的类关联。而通过常量相关的方法,每个enum实例可以具备自己独特的行为,这似乎说明每个enum实例就像一个独特的类。在上面的例子中,enum实例似乎被当作其“超类”ConstantSpecificMethod来使用,在调用getInfo()方法时,体现出多态的行为。