枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始的位置,枚举元素类表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
带有构造方法的枚举:
构造方法必须定义成私有的。
如果有多个构造方法,该如何选择哪个构造方法?
枚举元素MON和MON()效果一样,都是调用默认的构造方法。
带方法的枚举
定义枚举TrafficLamp
实现普通的next方法
实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
增加上表示时间的构造方法。
枚举元素必须位于枚举体中的最开始的位置,枚举元素类表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
带有构造方法的枚举:
构造方法必须定义成私有的。
如果有多个构造方法,该如何选择哪个构造方法?
枚举元素MON和MON()效果一样,都是调用默认的构造方法。
带方法的枚举
定义枚举TrafficLamp
实现普通的next方法
实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
增加上表示时间的构造方法。
枚举只有一个成员时,就可以作为一种单例的实现方式。
package day02;
import day02.EnumTest.WeekDay.TrafficLamp;
public class EnumTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDay today=WeekDay.SUN;
System.out.println(today); //枚举自动实现了toString方法
System.out.println(today.name()); //枚举自己的名字
System.out.println(today.ordinal()); //自己的排行
System.out.println(today.getClass()); //得到对象所在的类名
System.out.println(WeekDay.valueOf("MON").toString()); //将传来的字符串编程枚举类的对象
System.out.println(WeekDay.values().length); //将枚举对象转换成一个数组,方便使用迭代遍历枚举中的元素
TrafficLamp tl=TrafficLamp.RED;
System.out.println(tl.nextLamp());
}
//定义一个枚举
public enum WeekDay{
//枚举元素的后面加上一对(),里面写上实际参数,表示该常量需要被有参数的构造方法初始化
//()中不写任何的实际参数,表示该常量需要被无参数的构造方法初始化。
SUN("星期天",7),MON,TUE,WED,THU,FRI,SAT;
//无参的构造方法
private WeekDay(){ //构造方法必须要定义在所有元素的后面,而且必要私有
System.out.println("-----调用无参数------");
}
//有参数的构造方法
private WeekDay(String str,int day){ //传入需要的形式参数的类型就可以了
System.out.println("*****调用有参数******");
}
//交通灯的枚举
public enum TrafficLamp{
RED("红灯",30){
public TrafficLamp nextLamp(){ //是由TrafficLamp的子类实现
return GREEN;
}
},
GREEN("绿灯",30){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW("黄灯",5){
public TrafficLamp nextLamp(){
return RED;
}
};
//无参数的构造方法
private TrafficLamp(){
}
//获取下一个交通灯的方法,把它抽象,由Trafficlamp的子类去实现
public abstract TrafficLamp nextLamp();
//增加一个时间的构造方法,用来在实例化对象的时候初始化。
private String name;
private int time;
private TrafficLamp(String name,int time){
this.name=name; //把传过来的值赋值给我的成员变量
this.time=time;
System.out.println("------交通灯的有参构造方法------");
}
}
}
}