package ;

/**
 * User: Json
 * Date: 2021/8/30
 *         //枚举类 和注解
 *         //理解 类的对象只有有限个 确定的
 *         // 当需要定义一组常量 强烈建议使用枚举类
 *         // 如果枚举类中只有一个对象 则可以作为单例模式的实现方法
 *
 *         //如果定义枚举类
 *         //1. jdk5.0之前 自定义枚举类
 *         //2.  jdk5.0之后 可以使用enum关键字定义枚举类
 *         //3. 定义的枚举类 默认继承 class java.lang.Enum 不需要再toString() 了
 *
 *   使用枚举类实现接口的情况
 *   1. 实现接口 需要实现抽象方法
 *   2. 让枚举类的对象分别实现接口的抽象方法
 **/

//自定义枚举类
class Season{
    //1.需要使用 private final 修饰 最终的
    private final String seasonName;
    private final String seasonDesc;
    //2.私有化类的构造器
    private Season(String seasonName,String seasonDesc){
             this.seasonName=seasonName;
             this.seasonDesc=seasonDesc;
    }
    //3.提供当前枚举类的多个对象  public static fina 多个关键字修饰
    public static final Season SEASON= new Season("春天","1");
    public static final Season SEASON1= new Season("夏天","2");
    public static final Season SEASON2= new Season("秋天","3");
    public static final Season SEASON3= new Season("冬天","4");

    //4. 如果你有其他诉求

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

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


//使用关键字定义 enum
enum  Season1 implements showTest{
    //1.提供当前枚举类的对象  多个对象直接用逗号隔开 ,  必须先声明对象
    //分别实现
     SEASON("春天","1"){
        @Override
        public void show() {
                System.out.println("我来1了");
        }
    },
     SEASON1("夏天","2") {
         @Override
         public void show() {
             System.out.println("我来2了");
         }
     },
     SEASON2("秋天","3") {
         @Override
         public void show() {
             System.out.println("我来3了");
         }
     },
     SEASON3("冬天","4") {
         @Override
         public void show() {
             System.out.println("我来4了");
         }
     };


    //1.需要使用 private final 修饰 最终的
    private final String seasonName;
    private final String seasonDesc;
    //2.私有化类的构造器
    private Season1(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }

    //4. 如果你有其他诉求

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    //整体实现
//    @Override
//    public void show() {
//        System.out.println("我来了");
//    }

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

interface showTest{
    void show();
}
//定义常量
enum Status{
    FREE,BUSY,VOCATION
}
public class Json {
    public static void main(String[] args) {
        System.out.println("加油了");
        Season season = Season.SEASON;

        Season1 season1 = Season1.SEASON1;
        System.out.println(Season1.class.getSuperclass());

        // Enum 常用方法 values() 获取枚举类的 状态
        Season1[] values=Season1.values();
        for (int i=0;i<values.length;i++){
            System.out.println(values[i]);
        }

        // valueOf()  你要获取枚举里的对象
        Season1 season11 = Season1.valueOf("SEASON1");
        System.out.println(season11);

    }
}