自己实现枚举类

自己实现枚举类

  • A:枚举概述
    • 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
  • B:回想单例设计模式:单例类是一个类只有一个实例
    • 那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。
  • C:案例演示
    • 自己实现枚举类
package com.heima.enums;

public class Week01 {
	public static final Week01 MON = new Week01();
	public static final Week01 TUE = new Week01();
	public static final Week01 WED = new Week01();

	//私有构造,不让其他类创建本类对象
	private Week01() {
	}
}
========================================================
package com.heima.enums;

public class Week02 {
	public static final Week02 MON = new Week02("星期一");
	public static final Week02 TUE = new Week02("星期二");
	public static final Week02 WED = new Week02("星期三");
	private String name;

	private Week02(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
}
========================================================
package com.heima.enums;

public abstract class Week03 {

	// 父类引用指向子类对象,匿名内部类
	public static final Week03 MON = new Week03("星期一") {
		public void show() {
			System.out.println("星期一");
		}
	};

	public static final Week03 TUE = new Week03("星期二") {
		public void show() {
			System.out.println("星期二");
		}
	};

	public static final Week03 WED = new Week03("星期三") {
		public void show() {
			System.out.println("星期三");
		}
	};

	private String name;

	private Week03(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public abstract void show();
}
========================================================
package com.heima.enums;

public class Demo01_Enum {
	public static void main(String[] args) {
		Week01 MON = Week01.MON;
		System.out.println(MON);
		
		Week02 TUE = Week02.TUE;
		System.out.println(TUE.getName());
		
		Week03 WED = Week03.WED;
		WED.show();
	}
}
<think>好的,用户想了解如何实现枚举类,特别是在编程中的实现方式。首先,我需要回忆一下Java中枚举类的基本概念和实现方法。根据提供的引用内容,特别是引用[2]和[3],Java中的枚举类可以通过enum关键字定义,并且隐式继承了java.lang.Enum类,不能显式继承其他类,但可以实现接口。此外,枚举类的常量是public static final的,并且在类加载时创建。 用户可能需要知道两种实现方式:使用enum关键字和自定义枚举类。引用[2]提到,自定义枚举类通常继承Object,而enum定义的枚举类父类是java.lang.Enum。所以,首先应该分步骤说明这两种方法。 然后,需要考虑枚举类的常用方法,比如values()和valueOf(),这些在enum中自动生成,但自定义时需要手动实现。引用[3]提到枚举类可以实现接口,这部分需要举例说明,比如定义接口并在枚举类实现方法。 另外,引用[4]提到了使用函数接口和枚举实现配置式编程的例子,可以作为应用场景的参考,比如根据不同字段执行不同逻辑。这可能帮助用户理解枚举的实际应用。 用户的问题可能还涉及枚举的构造方法、线程安全性和单例模式。根据引用[1],枚举实现单例模式是线程安全的,可以提到这一点作为优势。 需要确保回答结构清晰,分步骤说明,并给出代码示例。同时,检查LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要关注代码块和引用。 最后,生成相关问题,比如枚举与常量的区别、线程安全性、应用场景等,参考用户提供的示例问题结构。</think>### 枚举类实现方式 在Java中,枚举类可以通过以下两种方式实现: #### 1. **使用`enum`关键字定义枚举类** 这是Java官方推荐的方式,枚举类隐式继承自`java.lang.Enum`类[^2][^3]。 ```java public enum Season { SPRING("春天"), SUMMER("夏天"), AUTUMN("秋天"), WINTER("冬天"); private final String name; // 构造方法必须为private(默认隐式) Season(String name) { this.name = name; } public String getName() { return name; } } ``` **特点**: - 枚举常量是`public static final`的,且在类加载时创建; - 支持自定义属性和方法; - 可实现接口(如`Runnable`); - 线程安全,天然适合实现单例模式[^1]。 #### 2. **自定义枚举类(Java 5之前的方式)** 适用于不支持`enum`关键字的旧版本: ```java public class Season { public static final Season SPRING = new Season("春天"); public static final Season SUMMER = new Season("夏天"); public static final Season AUTUMN = new Season("秋天"); public static final Season WINTER = new Season("冬天"); private final String name; private Season(String name) { this.name = name; } public String getName() { return name; } } ``` **特点**: - 父类为`Object`; - 需手动控制实例的唯一性; - 功能扩展性较差。 --- ### 枚举类的核心功能实现 #### **实现接口** 枚举类可以实现接口并重写方法: ```java public interface Description { String getDescription(); } public enum Color implements Description { RED("红色") { @Override public String getDescription() { return "热情的颜色"; } }, BLUE("蓝色") { @Override public String getDescription() { return "冷静的颜色"; } }; private final String name; Color(String name) { this.name = name; } } ``` #### **常用方法** - `values()`:返回所有枚举常量数组; - `valueOf(String name)`:根据名称返回枚举常量; - `ordinal()`:获取枚举常量的声明顺序(从0开始)。 --- ### 应用场景示例 1. **状态机**:如订单状态(`PENDING`, `PAID`, `CANCELLED`); 2. **配置式编程**:通过枚举关联函数接口实现动态逻辑[^4]; 3. **单例模式**:利用枚举的线程安全性实现单例[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左绍骏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值