enum的一个疑问?(待解决)

1、枚举类介绍

如果一个类的实例是有限且确定的,那么可以使用枚举类。比如:季节类,只有春夏秋冬四个实例。

枚举类使用enum进行创建,其实例必须从”第一行“开始显示写出。

enum Season{
   SPRING,SUMMER,FALL,WINTER;//默认public static final,这都是Season类的对象。
}

  特点:

    1、枚举类的对象默认都是public static final

    2、枚举类的构造器都是private,所以无法在外部创建其实例,这也决定了枚举类实例的个数的确定性(写了几个就是几个)。

    3、enum类如果不是abstract的,就默认是final的

      

    4、enum类默认extends java.lang.Enum,所以无法再继承其他类

2、遇到的问题

enum类默认被final修饰的情况下,是无法有子类的。但是在《疯狂Java讲义》中是这么说的:

那么,问题来了:

enum Season{
//    SPRING,SUMMER,FALL,WINTER;//默认public static final,这都是Season类的对象。
    SPRING{
        public void show(){
            System.out.println("I'm Spring");
        }
    },SUMMER,FALL,WINTER;
    private String name;
    //构造器默认且只能是private
    Season(){
        System.out.println("Season run...");//运行四次
    }
    public void setName(){
        //Java5开始,switch方法支持枚举类对象。
        switch(this){
            case SPRING:
                name="春";
                break;
            case SUMMER:
                name="夏";
                break;
            case FALL:
                name="秋";
                break;
            case WINTER:
                name="冬";
                break;
        }
    }
    public void setName1(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void show(){
        System.out.println("I'm show");
    }
}  

运行结果:

问题:SPRING是Season匿名子类的对象,但是前面已经说明Season类是final的。

猜你喜欢

转载自www.cnblogs.com/xiangguoguo/p/9061678.html