枚举类Demo

2024-01-10 06:03:04
/**
 * 枚举类的使用
 *      1。枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类
 *      2.当需要定义一组常量时,建议使用枚举类
 *      3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式
 * 如何定义枚举类
 *      方式一:JDK 1.5之前 自定义枚举类
 *      方式二:JDK 1.5之后 可以使用enum关键字定义枚举类
 *
 */
public class Season {
    //2.声明属性
    //用final修饰的成员变量,必须在声明时或代码块中或构造函数中进行赋值
    //但是在声明同时赋值或者代码块中赋值,赋值后不能改变,如果想改变  需要在构造方法中赋值
    private final String seasonName;
    private final String seasonDesc;


    //1.私有化构造器给对象属性赋值
    public Season(String s1,String s2){
        this.seasonName=s1;
        this.seasonDesc=s2;
    }

    //3.提供当前枚举类的多个对象
    public static final Season SPRING=new Season("春天", "春暖花开");
    public static final Season SUMMER=new Season("夏天", "夏日炎炎");
    public static final Season AUTUMN=new Season("秋天", "秋高气爽");
    public static final Season WINTER=new Season("冬天", "冰天雪地");

    //4.有需要的话提供属性的get方法

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
    //5 toString
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }

}

/**
 * 使用enum关键字来定义枚举
 */
//用enum关键字
public enum Season2 {
    //提供当前枚举类的对象 要求放在第一 之间用逗号  最后用分号
    //默认是public static final的
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "冰天雪地");


    private final String seasonName;
    private final String seasonDesc;

    private Season2(String s1,String s2){
        this.seasonName=s1;
        this.seasonDesc=s2;
    }
    //是否重写toString随意

    public static void main(String[] args) {
        //枚举类中的一些方法 toString 看是否重写  不重写 输出Enum中的toString
        System.out.println(Season2.SPRING);//SPRING 说明重写了toString
        //用enum关键字定义的枚举类 默认继承 java.lang.Enum
        System.out.println(Season2.class.getSuperclass());

        //values()方法 返回枚举类中的对象常量数组
        Season2[] values = Season2.values();
        for(Season2 season2:values){
            System.out.println(season2);
        }
        System.out.println("----------------------------");
        //valueOf(String str):可以把字符串转为对应的枚举类对象.要求字符串必须是枚举类型
        //就是找指定枚举
        Season2 season2 = Season2.valueOf("SUMMER");//如果枚举类里没有 字符串写错了  报错
        System.out.println(season2);
    }
}

枚举类继承接口

第一中情况 和类一样 重写方法

/**
 * 使用enum关键字定义的枚举类实现接口情况
 */
public enum Season3 implements Info{
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "冰天雪地");


    private final String seasonName;
    private final String seasonDesc;

    private Season3(String s1,String s2){
        this.seasonName=s1;
        this.seasonDesc=s2;
    }

    @Override
    public void show() {
        System.out.println("这是一个季节");
    }
}
interface Info{
    void show();
}

第二种情况,让枚举类里的每个对象都重写

/**
 * 使用enum关键字定义的枚举类实现接口情况
 */
public enum Season3 implements Info{
    SPRING("春天", "春暖花开"){
        @Override
        public void show() {
            System.out.println("春天");
        }
    },
    SUMMER("夏天", "夏日炎炎"){
        @Override
        public void show() {
            System.out.println("夏天");
        }
    },
    AUTUMN("秋天", "秋高气爽"){
        @Override
        public void show() {
            System.out.println("春天");
        }
    },
    WINTER("冬天", "冰天雪地"){
        @Override
        public void show() {
            System.out.println("冬天");
        }
    };


    private final String seasonName;
    private final String seasonDesc;

    private Season3(String s1,String s2){
        this.seasonName=s1;
        this.seasonDesc=s2;
    }

    public static void main(String[] args) {
        Season3.WINTER.show();
    }

}
interface Info{
    void show();
}

文章来源:https://blog.csdn.net/tiantiantbtb/article/details/135492875
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。