枚举类(enum)可以派生子类

枚举类默认是final修饰,无法派生子类,但如果枚举类是抽象的,它就可以有子类,子类会被final修饰。在使用匿名内部类为枚举值添加特定方法时,虽然枚举类的final修饰符消失,但匿名内部类本身是final的。这种机制允许我们为不同枚举值定制方法,同时保持枚举类不可变性。
摘要由CSDN通过智能技术生成
枚举类默认是final修饰的,不能派生子类,但是

枚举类如果是抽象的,则其不是final修饰,可以派生子类,其子类为final修饰

枚举类包含匿名内部类,该父类不是final修饰,其内部类是final修饰

在今天的学习,我发现了枚举类enum是可以派生子类的,可是不是说enum为了不改变数据,使用final修饰的吗,于是我就自己试了试,首先使用正常没有派生子类的枚举类如下:

public enum AceEnum{
	BOY("男孩"),GIRL("女孩");
	private String gender;
	private AceEnum(String gender){
		this.gender = gender;
	}
}

然后编译,并进行反编译:
在这里插入图片描述
可以看的出,在编译后,AceEnum枚举类已经是final类,那么按理说应该是不能派生子类的,可是,继续向下看。如果我们要为每个不同的枚举对象设置一个特定的方法,那么就需要应用的匿名内部类,为其实现相应方法,也就是改成下面的代码

public enum AceEnum{
	BOY("男孩"){
		public void show(){
			System.out.println("我是男孩");
枚举类是一种特殊的类,用于定义一组有限且确定的对象。枚举类的对象被称为枚举值。使用枚举类可以方便地定义一组常量,并且在代码中使用这些常量。枚举类还具有以下特点: 1. 枚举类可以实现一个或多个接口,但无法继承其他父类。默认情况下,使用enum定义的枚举类会继承java.lang.Enum类,该类实现了java.lang.Serializable和java.lang.Comparable接口。 2. 使用enum定义的枚举类默认会使用final修饰,因此无法派生子类。 3. 枚举类的构造器只能使用private访问控制符,并且必须在枚举值的前面定义。如果省略了构造器的访问控制符,则默认使用private修饰。 4. 枚举类的所有实例必须在枚举类的第一行显示列出。系统会自动为这些实例添加public static final修饰。 枚举类的优势在于可以将其看作是一个类,并且每个枚举值都是该类的一个实例。枚举值可以直接通过枚举类型名称调用,而且默认都是final、public和static修饰的。枚举类还提供了values()方法,用于遍历所有枚举值。 在Java中,枚举类的定义形式如下: ``` public enum ClassName { ENUM_VALUE1, ENUM_VALUE2, ... } ``` 其中,ENUM_VALUE1、ENUM_VALUE2等为枚举值。可以为枚举值添加自定义的属性和方法。 枚举类的使用可以帮助我们更好地管理和使用常量,提高代码的可读性和可维护性。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值