文章目录
1. 枚举类概述
在某些情况下,一个类的对象是有限而且固定的。例如季节类,只有4个对象;
①手动实现枚举类:
• private 修饰构造器
• 属性使用 private final 修饰
• 把该类的所有实例都使用 public static final 来修饰
②枚举类实现:
package day11;
public class Test3 {
public static void main(String[] args) {
//Season.SPRING,这段执行就是获取一个Season的对象
Season spring = Season.SPRING;
spring.showInfo();
Season summer = Season.SUMMER;
summer.showInfo();
Season spring1 = Season.SPRING;
//每次执行Season.SPRING获得的是相同的对象,枚举类中的每个枚举都是单例模式的
System.out.println(spring.equals(spring1));//返回true
}
}
enum Season{
SPRING("春天","春暖花开"),//此处相当于在调用有参的私有构造private Season(String name, String desc)
SUMMER("夏天","炎炎夏日"),//同上
AURUMN("秋天","秋高气爽"),//同上
WINTER("冬天","寒风凛凛");//同上
private final String name;
private final String desc;
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public void showInfo() {
System.out.println(this.name + ":" + this.desc);
}
}
运行结果:
枚举类和普通类的区别:
(1)使用 enum
定义的枚举类默认继承了 java.lang.Enum
类
(2)枚举类的构造器只能使用 private
访问控制符
(3)枚举类的所有实例必须在枚举类中显式列出 (,
分隔 ;
结尾 ), 列出的实例系统会自动添加 public static final
修饰
(4)所有的枚举类都提供了一个 values 方法
, 该方法可以很方便地遍历所有的枚举值
枚举类属性:
(1)枚举类对象的属性不应允许被改动 , 所以应该使用private final
修饰
(2)枚举类使用 private final 修饰的属性应该在构造器中为其赋值
(3)若枚举类显式的定义了带参数的构造器 , 则在列出枚举值时也必须对应的传入参数
2. 实现接口的枚举类
和普通 Java 类一样枚举类可以实现一个或多个接口
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式 , 则可以让每个枚举值分别来实现该方法
举例:
package day11;
public class Test3 {
public static void main(String[] args) {
//Season.SPRING,这段执行就是获取一个Season的对象
Season spring = Season.SPRING;
spring.showInfo();
Season summer = Season.SUMMER;
summer.showInfo();
Season spring1 = Season.SPRING;
//每次执行Season.SPRING获得的是相同的对象,枚举类中的每个枚举都是单例模式的
System.out.println(spring.equals(spring1));
spring1.test();
}
}
enum Season implements ITest{
SPRING("春天","春暖花开"),
SUMMER("夏天","炎炎夏日"),
AURUMN("秋天","秋高气爽"),
WINTER("冬天","寒风凛凛");
private final String name;
private final String desc;
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public void showInfo() {
System.out.println(this.name + ":" + this.desc);
}
@Override
public void test() {
System.out.println("这是实现的ITest接口的test方法");
}
}
interface ITest{
void test();
}
运行结果:
枚举类的方法: