枚举的构造
若某事物的取值只有有限个,可以一个个罗列出来,则这个列举出来的类型就叫做枚举类型。
(1)使用public static 修饰的方法构造枚举
public class Size {private int size=1;//用staic final修饰表示常量public static final Size SMALL=new Size(1);public static final Size MIDDLE=new Size(2);public static final Size BIG=new Size(3);private Size(int size){this.size=1;}public int getSize(){return size;}}
public class EnumTest {public static void main(String[] args) {if(Size.BIG==Size.BIG)System.out.println("相同的类型");elseSystem.out.println("不同的类型");}}
结果为 相同的类型
(2)使用enum关键字构造枚举
使用public static final表示的常量描述较为繁琐,使用enum关键字来定
义枚举类型取代常量,枚举类型是从Java5开始增加的一种引用数据类型。枚举值就是当前类的类型,也就是指向本类的对象,默认使用public
static final关键字共同修饰,因此采用枚举类型.的方式调用。枚举类可以自定义构造方法,但是构造方法的修饰符必须是private,默
认也是私有的。
使用enum关键字后(1)中的枚举定义可以简化为
public enum SizeEnum {BIG(3),MIDDLE(2),SMALL(1);private int size=3;private SizeEnum(int size){this.size=size;}}
再进一步简化为
public enum SizeEnum {BIG,MIDDLE,SMALL;}
可见使用enum关键字后,省略了static、final等关键字,变得更加方便,但本质上还是与之前相同。
Enum类型的常用方法
枚举类型对接口的实现
枚举类型实现接口需要实现接口的抽象方法,此时有两个选择:一、在枚举类型中重写方法一次。二、对枚举类型中的每个对象重写一次方法,这样可以做到每个对象的方法都不相同。
定义接口
public interface EnumInterface {public abstract void print();}
(1)重写方法一次
public enum SizeEnum implements EnumInterface{BIG,MIDDLE,SMALL;@Overridepublic void print() {System.out.println("在类型中重写方法一次");}}
main方法
public class EnumTest {public static void main(String[] args) {//获取SizeEnum的所有对象SizeEnum[] sizes=SizeEnum.values();//对每个枚举对象调用print方法for (SizeEnum s:sizes) {System.out.print(s.toString()+":");s.print();}}}
结果如下
可见所有对象调用的方法相同。
(2)对每个对象重写一次方法,SizeEnum修改为
public enum SizeEnum implements EnumInterface{BIG{@Overridepublic void print(){System.out.println("为BIG对象重写方法");}},MIDDLE{@Overridepublic void print(){System.out.println("为MIDDLE对象重写方法");}},SMALL{@Overridepublic void print(){System.out.println("为SMALL对象重写方法");}};}
main方法不变,结果为