-----------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>
<ahref="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
枚举类的介绍:
枚举相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表后面要有分号与其他元素分隔,,不能把枚举中的成员方法或成员变
量放在枚举元素前面,不然报错;
定义枚举实现抽象方法(以匿名内部类形式)
枚举只有一个成员时,就可以作为一种单例的实现方式;
详见张孝祥老师的“交通灯视频”;
Public enum Trafficlamp{
RED(30){
Public Trafficlame nextLamp(){
Return GREEN;
}
}
Public abstract Trafficlamp nextLamp();
Private int time;
Private Trafficlamp(int time){
This.time=time;
}
}
进一步理解枚举类:
枚举是一种特殊的类,其中的每一个元素都是该类的一个实例对象。定义枚举就是定义一个类。
要求:定义一个星期类WeekDay;分别有7个静态子对象,不同WeekDay成员,每个成员调用的nextDay方法返回的WeekDay对象都不同;
实现:将WeekDay定义为abstract类,将nextDay方法定义为抽象方法,每个WeekDay成员通过内部类的形式,调用私有构造方法(传入自己的参数),并覆写抽象方法,来实现功能,
WeekDay类,枚举功能:
1私有的构造方法,
2每个元素分别用一个共有的静态成员变量表示,
3可以有若干公有方法或抽象方法,如nextDay();
public class EnumTest{
publicstatic void main(String[]args){
WeekDayday1=WeekDay.SUN;
WeekDayday2=WeekDay.MON;
WeekDayday3=WeekDay.TUE;
System.out.println(day1);//调用toString();
System.out.println(day2.name());//调用name()方法, 返回此枚举常量的名称,在其枚举声明中
对其进行声明。
System.out.println(day3.ordinal());//返回枚举常量的序数(它在枚举声明中的位置,其中初始
常量序数为零)。
System.out.println(WeekDay.valueOf(“SUN”));//返回带指定名称的指定枚举类型的枚举常量。并打印
System.out.println(WeekDay.values().length);
//values()返回WeekDay类的对象数组(包含所有枚举元素)。打印其length属性;
public enum WeekDay{//在类中定义一个枚举类,
SUN(1),MON(2),TUE(3),WED(4),THI(5),FRI(6),SAT(7);//枚举元素定义
private WeekDay(int day){ //构造方法
this.day=day;
}
/*private WeekDay(){}; //空构造方法
public abstract WeekDaynextDay();//抽象方法;
*/
}
枚举类的应用:
1我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。每个枚举实例为一个常量;
2 用于switch语句。switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
定义枚举的技巧:
1向枚举中添加新方法(包括抽象方法):
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
2覆盖枚举的方法,如toString(),name()等;
3实现接口, 所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
4使用接口组织枚举:
- public interface Food {
- enum Coffee implements Food{
- BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
- }
- enum Dessert implements Food{
- FRUIT, CAKE, GELATO
- }
- }
-----------------<a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>
<ahref="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------