枚举类

枚举类本质上也是一个类,不过对比普通的类枚举类有自己的一些特点。

1.使用enum定义的枚举类默认继承于java.lang.Enum,所以自定义的枚举类不能显式的继承其他类。
2.使用enum定义的非抽象的枚举类,默认使用final修饰,也就是说它不能有子类。
3.枚举类的构造器只能用private修饰,不显式指出的话,默认也为private,也就是说枚举类不允许外部创建实例。
4.枚举类的所有实例必须在枚举类的第一行显式列出,并且这些实例默认被public static final修饰,也就说实例一旦确定就不可变,并且可通过枚举类名直接获取。

几个常用的枚举类型的方法

返回类型 方法名称 说明
enumType[] values() 返回枚举类型的所有实例
int compareTo(E o) 与指定枚举对象的比顺序
String name() 返回此枚举常量的名称
int ordinal() 返回枚举常量的索引值
String toString() 返回枚举常量的名称
static< T extends Enum < T>> T valueOf(Class< T > enumType, String name) 返回指定名称的指定枚举类型的枚举常量。

一个超级简单的枚举类:

enum Season {
	SPRING, SUMMER, FALL, WINTER;
}

下面是枚举类的一些用法:

1.在列举枚举实例的时候,可以像构造器传参(前提是有带参数的构造器)
enum Season {
    SPRING("春天"), SUMMER("夏天"), FALL("秋天"), WINTER("冬天");
    private String dec;

    private Season(String dec) {
        this.dec = dec;
    }

    public void getDec() {
        System.out.println(dec);
    }
}

2.枚举类实现接口
interface Dec {
    void getDec();
}

可以这样实现:(所有实例同一行为)

enum Season implements Dec {
    SPRING("春天"), SUMMER("夏天"), FALL("秋天"), WINTER("冬天");
    private String dec;

    private Season(String dec) {
        this.dec = dec;
    }

    public void getDec() {
        System.out.println(dec);
    }
}

也可以这样:(不同实例不同行为)

enum Season implements Dec {
    SPRING("春天") {
        public void getDec() {
            System.out.println("111");
        }
    },
    SUMMER("夏天"){
        public void getDec() {
            System.out.println("222");
        }
    },
    FALL("秋天"){
        public void getDec() {
            System.out.println("333");
        }
    },
    WINTER("冬天"){
        public void getDec() {
            System.out.println("444");
        }
    };
    private String dec;

    private Season(String dec) {
        this.dec = dec;
    }
}

3.枚举类定义抽象方法
enum Season {
    SPRING("春天") {
        public void getDec() {
            System.out.println("111");
        }
    },
    SUMMER("夏天"){
        public void getDec() {
            System.out.println("222");
        }
    },
    FALL("秋天"){
        public void getDec() {
            System.out.println("333");
        }
    },
    WINTER("冬天"){
        public void getDec() {
            System.out.println("444");
        }
    };
    private String dec;

    private Season(String dec) {
        this.dec = dec;
    }

    public abstract void getDec();

}

4.配合switch使用
public void judge(Season s) {
    switch (s) {
        case SPRING:	//不需要用Season.SPRING
            System.out.println("春天...");
            break;
        case SUMMER:
            System.out.println("夏天...");
            break;
        case FALL:
            System.out.println("秋天...");
            break;
        case WINTER:
            System.out.println("冬天...");
            break;
    }
}

posted @ 2018-04-30 17:08  _weirdly  阅读(101)  评论(0编辑  收藏  举报