Java入门笔记 07-枚举类

  介绍:在某些情况下,一个类的对象是有限且固定的,比如季节类,只有四个对象:春夏秋冬。这种实例有限而且固定的类,被称为枚举类。在JDK 5.0及以后,可以使用enum关键字定义枚举类,并且默认继承于java.lang.Enum类。

一、使用enum关键字定义枚举类

  1. 枚举类入门:最简单的枚举类可以仅仅定义枚举值,若需要使用该枚举类的某个实例,可以直接通过 枚举类名.枚举值 来调用。如下:

enum Season{
    SPRING,SUMMER,AUTUMN,WINTER;
}

Season s = Season.SPRING;
System.out.println(s.toString());//SPRING

  2. 枚举类进阶:枚举类是一种特殊的类,因此也可以定义成员变量、方法和构造器。

  • 提供当前枚举类的对象,多个对象之间采用逗号隔开,使用分号结束;
  • 声明Season对象的属性,使用private final修饰;
  • 私有化构造器,并为对象属性赋值;
  • 其他诉求:获取枚举类对象的属性。

  在枚举类中列出枚举值时,实际上就是调用构造器创建枚举类对象,只是这里无须使用new关键字,也无须显式调用构造器。前面列出枚举值时无须传入参数,甚至无须使用括号,仅仅是因为前面的枚举类中包含无参数的构造器。

 1 enum Season{
 2     SPRING("春天","这是春天"),
 3     SUMMER("夏天","这是夏天"),
 4     AUTUMN("秋天","这是秋天"),
 5     WINTER("冬天","这是冬天");
 6 
 7     private final String seasonName;
 8     private final String seasonDesc;
 9 
10     private Season(String seasonName,String seasonDesc){
11         this.seasonName = seasonName;
12         this.seasonDesc = seasonDesc;
13     }
14 
15     public String getSeasonName() {
16         return seasonName;
17     }
18 
19     public String getSeasonDesc() {
20         return seasonDesc;
21     }
22 }

  3. 实现接口的枚举类

 1 interface Info{
 2     void show();
 3 }
 4 
 5 enum Season implements Info{
 6     SPRING("春天","这是春天"),
 7     SUMMER("夏天","这是夏天"),
 8     AUTUMN("秋天","这是秋天"),
 9     WINTER("冬天","这是冬天");
10 
11     private final String seasonName;
12     private final String seasonDesc;
13 
14     private Season(String seasonName,String seasonDesc){
15         this.seasonName = seasonName;
16         this.seasonDesc = seasonDesc;
17     }
18 
19     public String getSeasonName() {
20         return seasonName;
21     }
22 
23     public String getSeasonDesc() {
24         return seasonDesc;
25     }
26 
27     @Override
28     public void show() {
29         System.out.println("这是一个季节");
30     }
31 }
32 
33 Season s = Season.SPRING;
34 System.out.println(s.toString());
35 s.show();
36 
37 输出:
38 SPRING
39 这是一个季节

  也可以将接口中的抽象方法放在枚举值中来实现,如下:

interface Info{
    void show();
}

enum Season implements Info{
    SPRING("春天","这是春天"){
        public void show() {
            System.out.println("这是春天");
        }
    },
    SUMMER("夏天","这是夏天"){
        public void show() {
            System.out.println("这是夏天");
        }
    },
    AUTUMN("秋天","这是秋天"){
        public void show() {
            System.out.println("这是秋天");
        }
    },
    WINTER("冬天","这是冬天"){
        public void show() {
            System.out.println("这是冬天");
        }
    };

    private final String seasonName;
    private final String seasonDesc;

    private Season(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
}

Season s = Season.SPRING;
System.out.println(s.toString());
s.show();

输出:
SPRING
这是春天

 

posted @ 2020-02-11 17:40  HankBernstein  阅读(271)  评论(0编辑  收藏  举报