Java中的枚举

目录

JDK1.5之前使用自定义枚举

在每个枚举对象中实现


Java枚举是一个特殊的类,一般表示一组常量,比如一年的4个季节,一年的12个月份,一个星期的7天,方向有东南西北等。


  • JDK1.5之前使用自定义枚举

参考代码1:

public class EnumDemo1 {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}

class Season{

    //2、创建枚举类的属性(成员遍历),必须是作为私有常量出现
    private final String SEASON_NAME;
    private final String SEASON_DESC;


    //1、必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    private Season(String SEASON_NAME,String SEASON_DESC){
        this.SEASON_NAME = SEASON_NAME;
        this.SEASON_DESC = SEASON_DESC;
    }

    //3、提供公共的静态的方法给外界获取枚举类中多个对象
    public static final Season SPRING = new Season("春天", "春暖花开");
    public static final Season SUMMER = new Season("夏天", "夏日炎炎");
    public static final Season FALL = new Season("秋天", "秋高气爽");
    public static final Season WINTER = new Season("冬天", "白雪皑皑");

    //4、提供公共的获取属性的方法
    public String getSEASON_NAME() {
        return SEASON_NAME;
    }

    public String getSEASON_DESC() {
        return SEASON_DESC;
    }

    //5、重写toString()方法
    @Override
    public String toString() {
        return "Season{" +
                "SEASON_NAME='" + SEASON_NAME + '\'' +
                ", SEASON_DESC='" + SEASON_DESC + '\'' +
                '}';
    }
}

输出结果:

Season{SEASON_NAME='春天', SEASON_DESC='春暖花开'} 

参考代码2:

public class EnumDemo2 {
    public static void main(String[] args) {
        Season2 spring = Season2.SPRING;
        System.out.println(spring);// SPRING
        //所有的枚举类都有个父类,叫做Enum
        System.out.println(Season2.class.getSuperclass());
        System.out.println(spring.getSEASON_NAME()+"---"+spring.getSEASON_DESC());
    }
}

enum Season2{

    //3、提供公共的静态的方法给外界获取枚举类中多个对象
    //将枚举相关的对象放在开头
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    FALL("秋天", "秋高气爽"),
    WINTER("冬天", "白雪皑皑");


    //2、创建枚举类的属性(成员遍历),必须是作为私有常量出现
    private final String SEASON_NAME;
    private final String SEASON_DESC;


    //1、必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    private Season2(String SEASON_NAME,String SEASON_DESC){
        this.SEASON_NAME = SEASON_NAME;
        this.SEASON_DESC = SEASON_DESC;
    }


    //4、提供公共的获取属性的方法
    public String getSEASON_NAME() {
        return SEASON_NAME;
    }

    public String getSEASON_DESC() {
        return SEASON_DESC;
    }

    //5、重写toString()方法
//    @Override
//    public String toString() {
//        return "Season{" +
//                "SEASON_NAME='" + SEASON_NAME + '\'' +
//                ", SEASON_DESC='" + SEASON_DESC + '\'' +
//                '}';
//    }
}

运行结果: 

 Season{SEASON_NAME='春天', SEASON_DESC='春暖花开'}

通过运行结果我们可以看出参考代码2在参考代码1的基础上进行了改进,不需要重写toSting()方法,将枚举相关的对象放在开头,与创建枚举的属性分开写了。 

 参考代码3:

public class EnumDemo3 {
    public static void main(String[] args) {
        Season3 spring = Season3.SPRING;
        System.out.println(spring);// SPRING
        //所有的枚举类都有个父类,叫做Enum
        System.out.println(Season3.class.getSuperclass());
        System.out.println(spring.getSEASON_NAME()+"---"+spring.getSEASON_DESC());
        spring.show();
    }
}
interface Person{
    void show();
}

enum Season3 implements Person{

    //3、提供公共的静态的方法给外界获取枚举类中多个对象
    //将枚举相关的对象放在开头
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    FALL("秋天", "秋高气爽"),
    WINTER("冬天", "白雪皑皑");


    //2、创建枚举类的属性(成员遍历),必须是作为私有常量出现
    private final String SEASON_NAME;
    private final String SEASON_DESC;


    //1、必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    private Season3(String SEASON_NAME,String SEASON_DESC){
        this.SEASON_NAME = SEASON_NAME;
        this.SEASON_DESC = SEASON_DESC;
    }


    //4、提供公共的获取属性的方法
    public String getSEASON_NAME() {
        return SEASON_NAME;
    }

    public String getSEASON_DESC() {
        return SEASON_DESC;
    }

    @Override
    public void show() {
        System.out.println("好好学习天天向上");
    }

    //5、重写toString()方法
//    @Override
//    public String toString() {
//        return "Season{" +
//                "SEASON_NAME='" + SEASON_NAME + '\'' +
//                ", SEASON_DESC='" + SEASON_DESC + '\'' +
//                '}';
//    }
}

运行结果: 

SPRING
class java.lang.Enum
春天---春暖花开
好好学习天天向上 

通过运行结果我们可以看出,参考代码3又在参考代码2的基础上进行了改进,使用show接口对枚举相关的对象进行重写,更进一步接近JDK1.5之后的枚举思想,直接在枚举类实现接口中的抽象方法。

参考代码5:

public class EnumDemo4 {
    public static void main(String[] args) {
        Season4 spring = Season4.SPRING;
        System.out.println(spring);// SPRING
        //所有的枚举类都有个父类,叫做Enum
        System.out.println(Season4.class.getSuperclass());
        System.out.println(spring.getSEASON_NAME()+"---"+spring.getSEASON_DESC());
        spring.show();

        Season4 winter = Season4.WINTER;
        winter.show();
    }
}
interface Person2{
    void show();
}

enum Season4 implements Person2{

    //4、提供公共的静态的方法给外界获取枚举类中多个对象
    //将枚举相关的对象放在开头
    SPRING("春天", "春暖花开"){
        @Override
        public void show() {
            System.out.println("出去春游");
        }
    },
    SUMMER("夏天", "夏日炎炎"){
        @Override
        public void show() {
            System.out.println("夏天吃西瓜");
        }
    },
    FALL("秋天", "秋高气爽"){
        @Override
        public void show() {
            System.out.println("秋天中秋吃月饼");
        }
    },
    WINTER("冬天", "白雪皑皑"){
        @Override
        public void show() {
            System.out.println("冬天打雪仗");
        }
    };


    //2、创建枚举类的属性(成员遍历),必须是作为私有常量出现
    private final String SEASON_NAME;
    private final String SEASON_DESC;


    //1、必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    private Season4(String SEASON_NAME,String SEASON_DESC){
        this.SEASON_NAME = SEASON_NAME;
        this.SEASON_DESC = SEASON_DESC;
    }


    //4、提供公共的获取属性的方法
    public String getSEASON_NAME() {
        return SEASON_NAME;
    }

    public String getSEASON_DESC() {
        return SEASON_DESC;
    }

//    @Override
//    public void show() {
//        System.out.println("好好学习天天向上");
//    }

    //5、重写toString()方法
//    @Override
//    public String toString() {
//        return "Season{" +
//                "SEASON_NAME='" + SEASON_NAME + '\'' +
//                ", SEASON_DESC='" + SEASON_DESC + '\'' +
//                '}';
//    }
}

运行结果:

SPRING
class java.lang.Enum
春天---春暖花开
好好学习天天向上 

通过运行结果我们可以看出,参考代码4又在参考代码3的基础上进行了改进,使用show接口对枚举相关的对象进行重写,就是现在JDK1.5之后的枚举思想,在每个枚举对象中实现。


  • 在每个枚举对象中实现

枚举类中的抽象方法实现,需要枚举类中的每个对象都对其进行实现。

参考代码5:

package com.hjl.test.day21;

enum Color{
    RED{
        public String getColor(){//枚举对象实现抽象方法
            return "红色";
        }
    },
    GREEN{
        public String getColor(){//枚举对象实现抽象方法
            return "绿色";
        }
    },
    BLUE{
        public String getColor(){//枚举对象实现抽象方法
            return "蓝色";
        }
    };
    public abstract String getColor();//定义抽象方法
}

public class EnumDemo2 {
    public static void main(String[] args) {

        for (Color c:Color.values()){
            System.out.print(c.getColor() + "、");
    }
}
}

输出结果:

红色、绿色、蓝色、 


到底啦!给靓仔一个关注吧!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangzai2048

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值