美文网首页
Java枚举详解

Java枚举详解

作者: 非洲铜 | 来源:发表于2017-12-03 19:20 被阅读0次

    enum修饰的类默认继承了Enum类,默认被static final修饰。因为Java不支持多继承,故枚举类不能继承其他类;因为该枚举默认被final修饰,所以枚举也不能被其他类继承。
    枚举最简单的应用就是定义一组常量:

    package enemerated;
    enum Season {
        SPRING, 
        SUMMER, 
        FALL, 
        WINTER
    }
    
    public class EnumClass {
        public static void main(String[] args) {
            System.out.println(Season.SPRING);  //SPRING
            System.out.println(Season.SUMMER);  //SUMMER
            System.out.println(Season.FALL);  //FALL
            System.out.println(Season.WINTER);  //WINTER
        }
    }
    

    枚举中的元素默认被public static final修饰。实际上,在JDK1.5之前,我们定义常量都是:public static final ...,引入枚举之后,我们就可以使用枚举来替代以前常量定义的方式。

    向枚举中添加方法
    package enemerated;
    enum Season {
        SPRING(1, "春天"), 
        SUMMER(2, "夏天"), 
        FALL(3, "秋天"), 
        WINTER(4, "冬天");
        
        private int index;
        private String name;
        
        private Season(int index, String name) {
            this.index = index;
            this.name = name;
        }
    
        public int getIndex() {
            return index;
        }
    
        public void setIndex(int index) {
            this.index = index;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    public class EnumClass {
        public static void main(String[] args) {
            System.out.println(Season.SPRING.getName());  //春天
            Season.SPRING.setName("改变春天");
            System.out.println(Season.SPRING.getName());  //改变春天
        }
    }
    

    枚举元素因为默认被public static final修饰,所以枚举元素一旦定义好是不能改变的,但是枚举元素后面的描述信息是可以改变的,以上的例子中,我们就把“春天”改变成了“改变春天”。
    枚举元素中的构造器只能用private修饰,这是为了防止被外部调用构造器去创建对象而造成重复。

    枚举元素中可以重写枚举定义中的方法

    枚举定义中可以定义方法和抽象方法,在枚举元素中可以重写这些方法:

    package enemerated;
    enum Season {
        SPRING(1, "春天"){
            @Override
            protected void show() {
                
            }
        }, 
        SUMMER(2, "夏天") {
            @Override
            protected void show() {
                
            }
        }, 
        FALL(3, "秋天") {
            @Override
            protected void show() {
                
            }
        }, 
        WINTER(4, "冬天") {
            @Override
            protected void show() {
                
            }
            protected void say() {
                System.out.println("我是冬天");
            }
        };
        
        private int index;
        private String name;
        
        private Season(int index, String name) {
            this.index = index;
            this.name = name;
        }
        
        abstract protected void show();
        protected void say() {
            System.out.println("我是季节");
        }
    
        public int getIndex() {
            return index;
        }
    
        public void setIndex(int index) {
            this.index = index;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    public class EnumClass2 {
        public static void main(String[] args) {
            Season.SPRING.say();  //我是季节
            Season.WINTER.say();  //我是冬天
        }
    }
    

    从这里可以看出,枚举元素实际上可以看成枚举类的子类。

    相关文章

      网友评论

          本文标题:Java枚举详解

          本文链接:https://www.haomeiwen.com/subject/cpczbxtx.html