java基础加强01 枚举

来源:互联网 发布:用友软件好用吗 编辑:程序博客网 时间:2024/04/30 15:49

枚举

一、用普通类模拟枚举的实现原理

1、用普通类模拟枚举

(1)重点

a、注意的几点:枚举中常量的定义

b、使用匿名子类对象:new WeekDay(){方法}

枚举中声明抽象方法(也要将类声明为抽象)利用定义的常量,创建匿名子类对象在匿名子类对象中覆盖抽象方法。

(3)、代码示例

abstract class WeekDay{

    //私有构造函数

private WeekDay(){}

    //建立WeekDay的匿名子类对象,将大量的if else语句转移为一个个独立的类

    public static final WeekDay SUN = new WeekDay(){

        public WeekDay nextDay(){return SAT ;}   

    };

    public static final WeekDay SAT = new WeekDay(){

        public WeekDay nextDay(){return SUN;}

    };

    //定义抽象方法

    public abstract WeekDay nextDay();

    //也可以使用普通方法

/*public WeekDay nextDay(){

        return this ==SUN?SAT:SUN;

    } */

    //复写toString()方法

    public String toString(){

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

    }

}

class EnumTest{

    public static void main(String[] args){

        WeekDay weekDay = WeekDay.SUN;

        so.p(weekDay.nextDay().toString());

    }

}

、枚举中的常见方法

1value()

(1)、重点

a、value() 返回类型:枚举对象的数组

b、将枚举定义在类的内部

c、for循环列出枚举中的元素

    (2)、示例代码

class  EnumTest{

         //列出枚举中的元素

public static void main(String[] args){

            WeekDay[] weekDays = WeekDay.values();

            so.p(weekDays.length);

            for(WeekDay day : weekDays){

               so.p(day);

            }

            so.p(WeekDay.SUN.ordinal());

         }

         //将枚举定义成内部类

         public enum WeekDay{

            SUN,MON,TUE,WED,THI,FRI,SAT

         }

}

三、实现带有构造方法的枚举

1、带有构造方法的枚举

   (1)、重点

a、元素列表必须位于所有成分之前,包括枚举的构造方法

b、枚举的构造方法必须是私有的

c、使用特定的构造方法初始化

在枚举初始化时通过在枚举元素后的括号中传入对应的参数列来实现使用特定的构造函数初始化

   (2)、示例代码

class  Enuedemo{

         public static void main(String[] args) {

            weekDay.SUN;

         }

         //枚举

public enum WeekDay{

            SUN(0),MON,TUE,WED,THI,FRI,SAT;

            private WeekDay(){}

            private WeekDay(int day){so.p(int day)}

         }

}

四、实现带有抽象方法的枚举

1、实现带有抽象方法的枚举

    (1)、重点

a、在枚举类内部定义抽象方法

b、每个匿名子类对象都要实现抽象方法

    (2)、示例代码

class  EnumDemo{

    public static void main(String[] args) {

       

    }

    public enum TrafficLamp()    {

        //在枚举元素后加大括号并加入类体即为匿名子类对象

RED{

            public TrafficLamp nextLamp(){

                return GREEN;

            }

        },

        GREEN{

            public TrafficLamp nextLamp(){

                return YELLOW;

            }

        },

        YELLOW{

            public TrafficLamp nextLamp(){

                return RED;

            }

        };

        //抽象方法

public abstract TrafficLamp nextLamp();

    }

}

原创粉丝点击