1、枚举概述
在J2SE5.0中新增加了枚举这个类型,枚举是一种特殊的类,其中每个元素都是该类的一个实例对象。
2.用普通类如何实现枚举的功能,就是规定只能返回几个实例对象。
//用普通类业实现枚举功能
public class Weekday { //将构造方法私有化 private Weekday(){} //定义几个实例变量 public static Weekday MON=new Weekday(); public static Weekday TUS=new Weekday(); public static Weekday WES=new Weekday(); public static Weekday THI=new Weekday(); public static Weekday FRI=new Weekday(); public static Weekday SAT=new Weekday(); public static Weekday SUN=new Weekday(); public void method(){ // do something } }
3、枚举的定义,使用enum关键字进行定义public enum Weekday
{
SUN,MON,TUE,WED,THI,FRI,SAT;//后面有其它成员是必须带分号,如果没有,可以不带
}
4、枚举的实质还是一个类,所以枚举有构造方法,只是构造方法必须是private的
private Weekday(){}//构造方法必须为私有的,枚举元素的默认构造方法无参构造方法
private Weeday(int index){} //如果枚举的元素要调用有参构造方法时,则需要用这种方式进行传值 SUN(value)
5,枚举还可以有变量、常量、普通方法和抽象方法。下面是定义的一个交通灯枚举类,可以很好说明枚举的组成部分
public enum Traffic { RED(30){//定义的枚举元素 @Override public Traffic next() {//每个元素必须实现枚举类的抽象方法 // TODO Auto-generated method stub return GREEN; } }, GREEN(20) { public Traffic next() { // TODO Auto-generated method stub return YELLOW; } }, YELLOW(3) { public Traffic next() { // TODO Auto-generated method stub return RED; } public String toString() { return "黄灯亮"+this.YELLOW.time; } }; private int time;//变量 private Traffic(){}//枚举的无参构造方法 private Traffic(int time){this.time=time;}//表示这个灯亮的时间 public abstract Traffic next();//定义一个抽象方法 }