枚举类

Posted yi-hui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举类相关的知识,希望对你有一定的参考价值。

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

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

}

以上是关于枚举类的主要内容,如果未能解决你的问题,请参考以下文章

同名的类函数宏和枚举器

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

JAVA枚举小结

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

php 枚举类代替hard code代码

php 枚举类代替hard code代码