关于java中枚举类enum的理解

/*
*       枚举类实际上也是一种类,只不过是有限个对象,固定几个,不能让用户随意创建
*       例如:星期,月份,季节,支付方式(wx zfb 银行卡 现金),性别
*       jdk5.0之前需要自定义枚举类型
*       jdk5.0之后使用enum定义
*       开发中建议,如果一个类的实例是有限个,推荐将此类声明为枚举类
*       如果枚举类的实例只有一个,那么可以看作单例的实现方式
*
* */


public class enumTest {
    public static void main(String[] args) {
        //研究其父类Enum中的常用方法
        //测试方法1:toString()
       // System.out.println(Season.SPRIING);//静态方法直接由类调用,在没改写toString()方法时,运行结果为变量名SPRING
        System.out.println(Season.SPRIING);//重写后
        //2:重写后还想调用变量名字则使用name(),父类所含方法
        System.out.println(Season.SPRIING.name());//SPRING
        //方法3:values()
        Season values[]=Season.values();//将所以变量放入数组
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);

        }
        //方法4:valuesOf(String objName),返回与objName相同的枚举类对象
        String obj = "WINTER";//String obj = "WINTER1";写成不存在的会异常
        Season season1 = Season.valueOf(obj);
        System.out.println(season1);
        //方法5:int ordinal返回位置从0开始
        System.out.println(Season.SPRIING.ordinal());
        //输出为0;
    }

}
enum Season{
    // 存在一个默认父类java.lang.Enum,不要继承Object,(其实Enum的父类为Object)
    //故不要再定义其父类否则报错
    //必须在枚举类的开头声明多个对象,对象之间用,隔开
    SPRIING("春天","春暖花开"),
    SUMMER("夏天","夏日炎炎"),
    AUTUNM("秋天","硕果累累"),
    WINTER("冬天","白雪皑皑");
    private final String SeasonName;//季节的名字
    private final String SeasonDesc;//季节的描述
    Season(String SeasonName,String SeasonDesc){
        this.SeasonName=SeasonName;
        this.SeasonDesc=SeasonDesc;
    }

    public String getSeasonName() {
        return SeasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "SeasonName='" + SeasonName + '\'' +
                ", SeasonDesc='" + SeasonDesc + '\'' +
                '}';
    }
}
--------------------------------------------------------------------------
//枚举类实现接口的操作
//1:枚举类中实现接口,在枚举类中重写接口的抽象方法,当不同枚举类对象执行此方法时,执行的是同一个方法
//2:让枚举类的每个对象去重写接口方法,此时通过执行可得不同方法
public class SeasonTest{
    public static void main(String[] args) {
        //通过枚举类对象实现方法重写后调用(情况1)
        Season1.SPRIING.show();//四个对象执行一样的方法
        //情况2:
        Season1 values []=Season1.values();
        for (int i = 0; i <values.length;i++) {
            values[i].show();
        }
    }

}
interface Info{
    void show();
}
enum Season1 implements Info{
//    SPRIING("春天","春暖花开"),
//    SUMMER("夏天","夏日炎炎"),情况1
//    AUTUNM("秋天","硕果累累"),
//    WINTER("冬天","白雪皑皑");
    SPRIING("春天","春暖花开"){
        public void show(){
            System.out.println("春天在哪里");
        }
},//分隔符别漏了
    SUMMER("夏天","夏日炎炎"){
        public void show(){
            System.out.println("宁静的夏天");
        }

    },
    AUTUNM("秋天","硕果累累"){
        public void show(){
            System.out.println("秋意浓");
        }

    },
    WINTER("冬天","白雪皑皑"){
        public void show(){
            System.out.println("大约在冬季");
        }

    };
//以上实现了各种方法的重写
    private final String SeasonName;//季节的名字
    private final String SeasonDesc;//季节的描述
    Season1(String SeasonName,String SeasonDesc){
        this.SeasonName=SeasonName;
        this.SeasonDesc=SeasonDesc;
    }

    public String getSeasonName() {
        return SeasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "SeasonName='" + SeasonName + '\'' +
                ", SeasonDesc='" + SeasonDesc + '\'' +
                '}';
    }
    public void show(){
        System.out.println("这是一个季节");
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值