枚举类

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

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

一个超级简单的枚举类:

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();

}

猜你喜欢

转载自www.cnblogs.com/yi-hui/p/8974041.html