模拟枚举和枚举的简单应用

来源:互联网 发布:淘宝来客提醒软件违规 编辑:程序博客网 时间:2024/05/22 07:03

枚举enum: 

特点:

枚举的直接父类 java.lang.Enum,但是不能显示继承 Enum。
枚举就相当于一个类,可以定义构造器、成员变量、普通方法和抽象方法。
默认私有的构造器,即使不写访问权限也是 private。
每个实例分别用一个全局常量表示, 枚举类的对象是固定的, 实例个数有限, 不能使用 new 关键字。
枚举实例必须位于枚举体中的最开始部分, 枚举实例列表的后要有分号与其他成员相分隔。
枚举实例后有花括号时,该实例是枚举类的匿名内部类对象。


现在来实现之定义的枚举类:


package com.itheima.study.myenum;


//定义一个 抽象类
//该类模拟枚举
 public abstract class Lamp
{
//定义变量name为了增强现实效果用于toString方法的显示
private String name;
//三个Lamp类型的常量(枚举中的属性都是public final static的)
public final static Lamp RED = new Lamp("RED"){


//实现类必须重写Lamp类中的抽象方法
@Override
void printName()
{
System.out.println("红灯");
}};
 
public final static Lamp GREEN = new Lamp("GREEN"){


@Override
void printName()
{
System.out.println("绿灯");
}};
 
public final static Lamp YELLOW= new Lamp("YELLOW"){


@Override
void printName()
{
System.out.println("黄灯");
}};
 
//构造方法私有化不能通过new关键字来生成对象。
private Lamp(String name)
{
this.name = name;
}
 
//抽象方法
abstract void printName();
//普通方法
public void print()
{
switch(name)
{
case "RED":
System.out.println("红灯停");
break;
case "GREEN":
System.out.println("绿灯行");
break;
case "YELLOW":
System.out.println("黄灯慢行");
break;    
}
}
//重写toString方法
public String toString()
{
switch(name)
{
case "RED":
return "RED";
case "GREEN":
return "GREEN";
case "YELLOW":
return "YELLOW";
   default:
    return null;
}
};


}


应用:


package com.itheima.study.myenum;


public class Client
{
public static void main(String[] args)
{
Lamp GREEN = Lamp.GREEN;
System.out.println(GREEN);
GREEN.print();
Lamp.RED.print();
Lamp.YELLOW.print();
Lamp.YELLOW.printName();
}
}


运行结果为:

GREEN
绿灯行
红灯停
黄灯慢行
黄灯


现在我们来应用java为我们提供的枚举类:


以一道案例来示范


一个交通灯枚举类,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法,
并实现红灯出现5秒之后变成绿灯,绿灯3秒之后变成黄灯,黄灯2秒之后变成红灯,如此循环


灯枚举:


enum Light
{
RED("红灯")
{
//当前灯的next方法
void next()
{
//输出红灯
System.out.println(RED);
try
{
//等待5秒
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
//运行绿灯的next方法
GREEN.next();
}
},
GREEN("绿灯")
{
void next()
{
//输出绿灯
System.out.println(GREEN);
try
{
//等待时间
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
//执行黄灯的next方法
YELLOW.next();
}
},
YELLOW("黄灯")
{
void next()
{
//输出黄灯
System.out.println(YELLOW);
try
{
//等待时间
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}


//执行红灯的next方法
RED.next();


}
};
String value;


//枚举的构造方法必须私有化
private Light(String value)
{
this.value = value;
}


//重写toString
public String toString()
{
return value;
}


//实现指向下一个灯,该方法为抽象方法,所以每一个枚举实例必须复写该方法
abstract void next();
}



执行类:

public class TestSix
{


public static void main(String[] args)
{

//获得绿灯枚举实例
Light green = Light.GREEN;

//重绿灯开始执行
green.next();
}


}


运行结果:


绿灯
黄灯
红灯
绿灯
黄灯
红灯
绿灯


如此就实现了间隔一定时间的循环