黑马程序员_加强12_枚举 1.5的性特性

来源:互联网 发布:原谅我红尘颠倒 知乎 编辑:程序博客网 时间:2024/06/08 11:53

---------------------------------------------------android培训、java培训、期待与您交流!---- --------------------------------------

为什么要有枚举?(枚举的作用?)

枚举的作用可以在编译时期规范某个类的变量取某几个固定的值,否则,编译器就报错。达到在源程序时期就可以控制源程序中填写的非法值。

那么什么是枚举呢?

我们先用普通类来模拟一下枚举类:

public abstract class WeekDay1 {

    private WeekDay1(){}; //私有化构造函数

    //创建对象,并对外提供

    public final static WeekDay1 SUN = new WeekDay1(){

     public WeekDay1 nextDay(){

          return MON

        }

    };

    public final static WeekDay1 MON = new WeekDay1(){

    public WeekDay1 nextDay(){

     return SUN

   }

    };

    public abstract WeekDay1 nextDay();

/*    public WeekDay nextDay(){

    if (this == SUN)

     return MON; 

      else

      return SUN;

    }*/

    public String toString(){

     return this ==MON?  "MON":"SUN";

    }

}

 

通过以上程序,我们可以得出结论:

         枚举,就是一个普通的类,它私有化了构造函数,然后在内部创建了固定的几个静态(static)的公有(public)的对象对外提供。这个时候该类只能有固定那几个类,其他都和普通类用法一样.

 

3   如何使用枚举类?(写一个基本的枚举类)

      public static void main(String[] args) {

Week week1 = Week.MON;

System.out.println(week1);

}

public enum Week{

SUN,MON,TUS,SAT,TIR,FRI;

}

4  带构造方法的枚举(元素列表必须位于第一行,在构造函数之前)

构造方法必须定义成私有的

如果有多个构造方法,该如何选择哪个构造方法?答:通过参数辨别。

枚举元素MONMON()的效果一样,都是调用默认的构造方法。

实例:

public class WeekDay {

 

public static void main(String[] args) {

Week week1 = Week.MON;

System.out.println(week1);

}

public enum Week{

SUN(),MON(1),TUS,SAT,TIR,FRI;   //元素后面加()来使用构造方法第一个使用第一个构造函数,第二个使用第二个构造函数

private Week(){};  //构造函数必须被私有化

private Week(int day){

System.out.println("这一天是第"+day);

};  //构造函数必须被私有化

}

}

 

5  实现带有抽象方法的枚举:

//交通灯系统(练习带有抽象方法的枚举)

public enum TrafficLamp{

RED(30){    //子类必须实现该类的抽象方法(通过匿名子类实现)

public TrafficLamp nextDay(){

return GREEN;

}

},GREEN(45){

public TrafficLamp nextDay(){

return YELLOW;

}

},YELLOW(5){

public TrafficLamp nextDay(){

return RED;

}

};

private TrafficLamp(){}

        //用抽象方法实现枚举的功能nextDay

public abstract TrafficLamp nextDay();

   //用构造函数实现带有参数的枚举

   private int time;

   private TrafficLamp(int time){this.time = time;}

}


0 0
原创粉丝点击