枚举类型

本文详细解析了Java中枚举类型的定义与使用,包括枚举类的基本特性、如何添加方法与域、构造方法的使用、抽象方法的实现以及枚举类方法的覆盖。通过具体示例展示了枚举类的灵活性和强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组建使用。

枚举类型的定义

定义枚举类使用关键字enum(定义类使用class),后面紧跟类名。例子:
public enum Shrubbery{
A,B,C
}

其中A,B,C是这个枚举类的实例,即这个枚举类有哪些实例是在定义这个枚举类的时候就定义好的,在别的地方不能在创建这个枚举类的实例。

基本枚举类的特性

当我们定义一个枚举类时,编译器会自动将这个枚举类继承java.lang.Enum类。就我们定义一个普通类一样(class A),如果没有明确指明这个类A的父类,那这个类A继承Object类.实际上java.lang.Enum也继承Object类。Enum类还实现了Comparable和Serializable接口。Enum类除了具有Object类和Comparable及Serializable接口的方法外还具有values()方法,Object类以及Comparable和Serializable接口都没有这个方法,在Enum中也没有这个方法,那这个方法哪里来的?这个编译器给Enum类加上的static方法,除了加了这个方法,还加了一个带一一个参数的valueOf()方法(Enum类本身有一个带有两个参数的方法)。

  1. values()方法返回这个枚举类的数组。
  2. valueOf(Class ,String)方法更具名字返回这个枚举类的实例,如果不存在就会抛出异常。
  3. ordinal()方法返回当前枚举实例在他的枚举类中定义的顺序。从0开始。
  4. getDeclaringClass()返回这个枚举对象所属类的类名。
  5. getEnumConstants()返回当前枚举类的所有实例。此方法其实属于Class类的方法,但如果是普通类(class)调用次方法就会返回null。

由于我们定义的枚举类继承了Enum类,Java中只允许单根继承,所以我们定义的枚举类不能在继承其他任何类,但可以实现接口。

向枚举类中添加新的方法或域

如果向枚举类中添加方法或域时,定义的顺序一定是枚举实例,中间用,隔开,且最后一个枚举实例的最后一定要加上;。

添加构造方法和域

public enum Shrubbery{
	 A("name is A"),B("name is B"),C("name is C");
	
     private String description;
    
     private Shrubbery(String description){
    	this.description=description;
     }

	 public String getDescription(){
 		return description ;
	 }
}

可以这样调用

Shrubbery.A.getDescription();

这里特意把构造方法设置成private,也可以定义为public ,但如果在改枚举类外调用构造方法,编译器会报错。因为枚举类的实力在定义改枚举类时就已经定义好了,不能在其他地方创建枚举类的实例了。

添加抽象方法

public enum Shrubbery{
	A{
		String getInfo(){
			return "name is A"
		}
	},
	B{
		String getInfo(){
			return "name is A"
		}
	},
	C{
		String getInfo(){
			return "name is A"
		}
	};
	abstract String getInfo();
}

有抽象方法时,每个枚举实例都要实现这个抽象方法。

覆盖枚举类方法

我们定义的枚举类也可以覆盖基类的方法,如toString()方法。

public enum Shrubbery{
	A,B,C;

	public String toString(){
		return "name is "+name();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值