传智播客----枚举之使用enum定义枚举、实现了接口的枚举类

package com.zhou.testenum;
/**
* 使用enum定义枚举类:
*    JDK1.5之后新增的enum关键字用于定义枚举类;
*    枚举类和普通类的区别:
*        1.使用enum定义的枚举类默认继承了java.lang.Enum类;
*        2.枚举类的构造器只能使用private访问控制符;
*        3.枚举类的所有实例必须在枚举类中显示列出(,分隔 ;结尾),列出的实例系统会自动添加public static final修饰;
*        4.所有的枚举类都提供了一个values方法,该方法可以很方便的遍历所有的枚举值;
*        
*     JDK1.5中可以在switch表达式中使用枚举类的对象作为表达式,case子句可以直接使用枚举值的名字,无需添加枚举类作为限定;
*     若枚举只有一个成员,则可作为一种单子模式的实现方式;
*    
*     枚举类的属性:
*        枚举类的对象的属性不应允许被改动,所以应该使用private final修饰;
*        枚举类使用private final修饰的属性应该在构造器中为其赋值;
*        若枚举类显示的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数;  
*/
 /**
  * 实现了接口的枚举类:
  *     和普通java类一样,枚举类可以实现一个或多个接口;
  *     若需要每个枚举值在调用实现的接口方法呈现不同的行为方式,则可以让每个枚举值分别来实现该方法;
  *
  *
  */
public enum Season2 implements TimeInfo{ //将class关键字换成enum,这样就是一个枚举类,并实现 TimeInfo接口
//2.必须在枚举类的第一行写出有哪些枚举值;
// SPRING,SUMMER,FALL,WINTER;//这样写完之后,public enum Season2 {这行出错了,是因为那两个属性常量值没有被赋值,因为写的是有参的构造器,如果是无参的构造器就能这样写;
SPRING("春天","春风又绿江南岸"){
@Override
public String getTimeInfo() {
return "2月-5月";
}
},SUMMER("夏天","映日荷花别样红"){
@Override
public String getTimeInfo() {
return "5月-8月";
}
},FALL("秋天","秋水共长天一色"){
@Override
public String getTimeInfo() {
return "8月-11月";
}
},WINTER("冬天","窗含西岭千秋雪"){
@Override
public String getTimeInfo() {
return "11月-2月";
}
}; //写枚举值是传入属性值,每一个就是一个对象,写这个枚举值的时候实际上是利用了构造器创建的对象;
                      //----这四个枚举值就是四个常量,即四个对象;
//1.写属性;
private final String name; //季节的名字;写完之后这一行出错了,是因为我们要在第一行中写出有哪些枚举值;
private final String desc; //季节的描述;
//3.因为属性值不同的对象是变化的,给属性值赋值当然是用构造器进行赋值;
private Season2(String name, String desc) { //这样写完构造器之后,第一行列出枚举值的那行出错了,因为你在创建对象的时候,并没有传入name与desc的值,在创建构造器的时候只有一个private,是不可选的;
this.name = name;
this.desc = desc;
}
//4. 写getter方法;
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
/**
* 以下这种方式可以实现,但是太麻烦了,但是还有一种更好的方式:就是在创建枚举对象的时候同时提供这个方法的实现;
*/
// @Override
// public String getTimeInfo() {//实现这个方法我得对每个季节提供一个单独的实现,因为季节的时间跨度是不一样的,当然可以去判断是哪个季节,然后一个一个的实现;
//        System.out.println(this.toString().equals("SPRING"));
//        return null;
// }
//5.写toString()方法;
 //----不让在里面写;
}


//定义枚举类实现的接口;
package com.zhou.testenum;
public interface TimeInfo {
  public String getTimeInfo();
}


package com.zhou.testenum;
public class TestSeason {
/**
* 测试枚举:
*/
public static void main(String[] args) {
// Season SPRING = Season.SPRING;
// System.out.println(Season.SPRING.getName());
       System.out.println(Season2.SPRING); //这样显示的是枚举值对应的那个字符串;
       //使用values方法,该方法可以很方便的遍历所有的枚举值;
       for(Season2 s:Season2.values()){
//         System.out.println(s);
//        
//         System.out.println(s.toString().equals("SPRING"));//直接在枚举类实现方法的测试;
System.out.println(s.getTimeInfo()); //在创建每个枚举值即枚举对象时,各个枚举对象同时实现接口的方法的测试;
           }
/**
* 枚举类的valueof方法测试:
*/
String str = "WINTER";
//我希望用这个字符串来获取我对应的那个枚举类对象,可以使用valueof方法;
Season2 s1 = Season2.valueOf(Season2.class, str);
System.out.println(s1.getName());
}
}


本文出自 “IT技术JAVA” 博客,转载请与作者联系!

你可能感兴趣的:(实现了接口的枚举类,使用enum定义枚举)