关于枚举类(enum)

关于枚举类(enum)

枚举类与普通类的不同之处

  • 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类,而不是 Object 类,因此枚举类不能显式继承其他普通父类。
  • java.lang.Enum 类实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。
  • 使用enum定义、非抽象的枚举类默认用final修饰,因此枚举类无法派生子类
  • 枚举类的构造器只能用private修饰,即使省略,也只能用private
  • 枚举类的所有实例必须在枚举类的第一行显式指出,否则这个枚举类永远都不能产生实例。列出的这些类,系统会自动添加 public static final。
  • 枚举类默认提供了一个values()方法,可以方便的遍历所有的枚举值。
public enum Season {
    SPRING,SUMMER,AUTOMN,WINTER;
}

class EnumTest{

    static void judge(Season season){
        //switch语句里的表达式可以是枚举值
        switch (season){
            case AUTOMN:
                System.out.println("秋");
                break;
            case SPRING:
                System.out.println("春");
                break;
            case SUMMER:
                System.out.println("夏");
                break;
            case WINTER:
                System.out.println("冬");
                break;
        }
    }
    public static void main(String[] args) {
        for (Season s :Season.values()) {
            System.out.println(s); //SPRING SUMMER AUTOMN WINTER
        }
        EnumTest.judge(Season.AUTOMN);  //秋
    }
}

枚举类的成员变量、方法和构造器

成员变量:和普通类一样。

方法:和普通类一样。

构造器:只能用private 修饰,也就是说,只能在枚举类中第一行创建实例时用。

实现接口的枚举类:

interface GenderDesc{
    void setName();
}

public enum Gender implements GenderDesc{
    //花括号部分实际上是一个类体部分,和匿名内部类差不多,
    //这样就以不同的行为方式实现了接口,并且创建出枚举类的实例。
    MALE("男"){
        @Override
        public void setName() {
            System.out.println("男");
        }
    },
    FEMALE("女") {
        @Override
        public void setName() {
            System.out.println("女");
        }
    };

    //枚举类通常应该设计成不可变类,它的成员变量不应该被改变
    //所以,枚举类的成员变量都应该使用private final修饰
    private final String name;

    Gender(String name){
        this.name = name;
    }

}

包含抽象方法的枚举类:

//尽管枚举类中含有抽象方法,但是不能为枚举类添加abstract关键字,
//系统会自动为其添加,只需要每个枚举类实例提供抽象方法的实现就好。
public enum Gender {
    //花括号部分实际上是一个类体部分,和匿名内部类差不多,
    //这样就以不同的行为方式实现了抽象方法,并且创建出枚举类的实例。
    MALE("男"){
        @Override
        public void setName() {
            System.out.println("男");
        }
    },
    FEMALE("女") {
        @Override
        public void setName() {
            System.out.println("女");
        }
    };
    
    //枚举类通常应该设计成不可变类,它的成员变量不应该被改变
    //所以,枚举类的成员变量都应该使用private final修饰
    private final String name;
    abstract void setName();

    Gender(String name){
        this.name = name;
    }
}

猜你喜欢

转载自www.cnblogs.com/woshi123/p/12470538.html
今日推荐