JAVA高级-枚举类

14 篇文章 0 订阅
11 篇文章 1 订阅

枚举类

什么是枚举类?

  • 在数学里,掷骰子,每一次都列举出来。这就是枚举。
  • 在java中,若一个类的对象是有限个,确定的,我们便可以引入枚举的思想,构造枚举类。
  • JDK1.5之前需要自定义枚举类
  • JDK 1.5 新增的 enum 关键字用于定义枚举类
  • 若一个类里只有一个对象,那么可将此枚举类看成单例模式

自定义枚举类

package com.hyb.usualClass;

/**
 * @program: EnumClass
 * @description:枚举类
 * @author: Huang Yubin
 * @create: 2021-06-12 15:03
 **/

class EnumMain{
    public static void main(String[] args) {
        EnumClass s1 = EnumClass.s1;
        System.out.println(s1);
        System.out.println(s1.getA());
    }
}

class EnumClass {
//    为了防止外部修改,私有化属性
    private final String a;
    private final String b;

//    私有化构造器
    private EnumClass(String A,String B){
        this.a=A;
        this.b=B;
    }

//    公有化对象,静态,final修饰,防止外部更改
    public static final EnumClass s1=new EnumClass("a","hyb");
    public static final EnumClass s2=new EnumClass("b","zyl");

    /*既然是枚举,不允许外部改变自己的值,那么自然不能提供set方法,但外部需要访问我们的属性,
    * 所以我们只能提供get方法和toString*/



    public String getA() {
        return a;
    }

    public String getB() {
        return b;
    }

    @Override
    public String toString() {
        return "EnumClass{" +
                "a='" + a + '\'' +
                ", b='" + b + '\'' +
                '}';
    }
}

enum枚举类

package com.hyb.usualClass;

/**
 * @program: EnumClass
 * @description:枚举类
 * @author: Huang Yubin
 * @create: 2021-06-12 15:03
 **/

class EnumMain{
    public static void main(String[] args) {
        EnumClass s1 = EnumClass.s1;
        System.out.println(s1);
    }
}

enum EnumClass {

//    从原来的公有化对象那里转变,删除重复的,
    s1("a","hyb"),
    s2("b","zyl");

//    为了防止外部修改,私有化属性
    private final String a;
    private final String b;

//    私有化构造器
    private EnumClass(String A,String B){
        this.a=A;
        this.b=B;
    }

//    公有化对象,静态,final修饰,防止外部更改

    /*在enum枚举类中,继承的不是object类,而是继承enum类的*/
    @Override
    public String toString() {
        return "EnumClass{" +
                "a='" + a + '\'' +
                ", b='" + b + '\'' +
                '}';
    }
}

enum常用方法

  • values返回enum对象的内容
  • valuesOf返回指定对象的值
class EnumMain{
    public static void main(String[] args) {
//        EnumClass s1 = EnumClass.s1;
//        System.out.println(s1);

        /*我们都知道,toString方法是可以返回内容的,但是在enum里已经实例化了对象,外面就不可能再调用了
        * 只能通过values和valuesOf方法,返回内容,
        * 当调用这两个方法的时候,它们会自动调用toString方法,然后想要怎么输入全靠你重写toString决定了
        在这里注意,它自己本身的父类的toString方法是返回对象名字的,所以*/
        EnumClass[] value=EnumClass.values();
        for (EnumClass enumClass : value) {
            System.out.println(enumClass);
        }
        System.out.println(EnumClass.valueOf("s1"));
    }
}

enum类实现接口

  • 接口实现方法就不用多说了。

  • 但有一点值得一提,我们实现接口时重写的方法,都是在本类下实现的,

    但是一切皆对象,所以本类也是个对象,这么说来,我们也可以在本来下的对象里重写接口的方法。

    例如,以上述为例,我们要求分别在s1和s2中重写接口方法,如何实现呢?

    很简单,直接在对象里实现就可以了。

    interface Enum{
        void show();
    }
    
    enum EnumClass implements Enum{
    
    //    从原来的公有化对象那里转变,删除重复的,
        s1("a","hyb"){
        @Override
        public void show() {
            System.out.println("这是是s1");
        }},
        s2("b","zyl"){
            @Override
            public void show() {
                
            }
        };
    

    注意:以上代码不全,只是做个例子,当我们分别重写,必须要全部都重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值