黑马程序员--java枚举

/* 总的来说,枚举类型最主要的特点就是构造方法的私有化,这样在类型外就无法新建枚举对象, 只能使用在类型内定义好的对象,如果枚举类型内只有一个对象,这就是单例模式了

*/

/* 枚举实现的原理: 最重要的就是将构造方法私有化了,在类外无法实例化该类的对象了, 只能使用类内已经定义好的对象,达到了限制该类对象的目的。 */

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集合,支持枚举类型,

这方面的东西以后再补充 */

posted @ 2015-11-24 22:15  谢天航  阅读(126)  评论(0编辑  收藏  举报