/* 总的来说,枚举类型最主要的特点就是构造方法的私有化,这样在类型外就无法新建枚举对象, 只能使用在类型内定义好的对象,如果枚举类型内只有一个对象,这就是单例模式了
*/
/* 枚举实现的原理: 最重要的就是将构造方法私有化了,在类外无法实例化该类的对象了, 只能使用类内已经定义好的对象,达到了限制该类对象的目的。 */
class Enum2{
//这里常量的修饰范围必须是public,否则的话,在类外无法通过类名.对象来调用
public static final Enum2 RED = new Enum2("红色");
public static final Enum2 BLUE = new Enum2("蓝色");
public static final Enum2 YELLOW = new Enum2("黄色");
private String name = null;
private Enum2(String name){
setName(name);
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
} }
class Enum1{
public static void main(String [] args){
Enum2 e = Enum2.RED;
//由于构造方法私有化了,在类外无法实例化Enum2对象了,只能使用Enum2类内定义好的对象
//Enum2 e2 = new Enum2("lanse");
System.out.println(e.getName());
//System.out.println(e2.name);
} }
/* 定义一个枚举类型:特殊强调“它不是一个类,感觉和C语言中的结构体特别像,但用法和类一样 它可以定义在类内,也可以定义在类外”
基本格式 enum 类型名称{
枚举对象1,枚举对象2....;
}
*/ class Enum3{ enum Jiaotongdeng{
/* 这里的枚举对象 RED等同于public static final Jiaotongdeng RED = new Jiaotongdeng();
如果是RED("红色"),即有参数了,此时RED("红色")等同于public static final Jiaotongdeng RED = new Jiaotongdeng("红色");
每创建一个对象,就会调用一次构造方法, 所以这里的结果是 yes yes yes BLUE */
RED,BLUE,YELLOW;
private Jiaotongdeng(){
System.out.println("yes");
}
}
public static void main(String [] args){
Jiaotongdeng jtd = Jiaotongdeng.BLUE;
//输出枚举对象时,由于它覆写了toString()方法,直接输出枚举常量的名称
System.out.println(jtd);
} }
/* 最复杂的枚举类型:枚举类型实现了接口或抽象方法。
RED("红色"){ 覆写方法 }
*/
/*
interface Print{
public String print();
}
enum Jiaotongdeng implements Print
*/
enum Jiaotongdeng{
RED("红色"){
public String print(){
return "红色";
} },
GREEN("绿色"){
public String print(){
return "绿色";
} },
YELLOW("黄色"){
public String print(){
return "黄色";
} };
private String name = null;
private Jiaotongdeng(String name){
this.name = name;
}
public abstract String print();
}
class Enum4{
public static void main(String [] args){
//不管枚举类型中的对象有无参数,都是通过枚举类型.对象来实例化
Jiaotongdeng jtd = Jiaotongdeng.GREEN;
System.out.println(jtd.print());
} }
/* 使用enum关键字定义的枚举类型,都会继承Enum类,而该类实现了Comparable接口, 可以进行排序,在java集合中,有两个EnumMap,EnumSet集合,支持枚举类型,
这方面的东西以后再补充 */
原文:http://www.cnblogs.com/xietianhang/p/4993105.html