java枚举类,手动实现+enum关键字实现

枚举类:类的对象必须是有限个,不重复的,确定的。比如星期类的对只能有星期一,星期二…星期日,季类的对象只能有春夏秋冬四个对象,当需要定义一组常量,应该用枚举类。

如何定义枚举类:

方式一:jdk5.0之前,自定义枚举类
方式二:jdk5.0时可以使用enum关键字定义枚举类

自定义枚举类

class Season{
	
	//声明season的私有属性
	private final String seasonName;
	private final String seasonDesc;
	
	//私有化构造器,防止外部创建随意创建Season对象
	private Season(String seasonName , String seasonDesc) {
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}
	//创建四个Season对象
	public static final Season SPRING = new Season("春天" ,"spring");
	public static final Season SUMMER = new Season("夏天" ,"summer");
	public static final Season AUTUMN = new Season("秋天" ,"autumn");
	public static final Season WINNTER = new Season("冬天" ,"winnter");
	
	public String getSeasonName() {
		return seasonName;
	}
	
	public String getSeasonDesc() {
		return seasonDesc;
	}
	
	public String toString() {
		return "seasonName = "+seasonName+", seasonDesc = "+seasonDesc;
	}
}
public class EnumTest_01 {
	public static void main(String[] args) {
		Season SPRING = Season.SPRING;
		System.out.println(SPRING);
	}
}

用enum关键字定义枚举类:

注意:

  • 默认的toString()打印的是对象的名字
  • 定义的枚举类默认继承的是java.lang.Enum类
enum Season
	//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
	SPRING("春天" ,"春暖花开"),
	SUMMER("夏天" ,"夏日炎炎"),
	AUTUMN("秋天" ,"秋高气爽"),
	WINNTER("冬天" ,"冰天雪地");
	
	//声明season的私有属性
	private final String seasonName;
	private final String seasonDesc;

	//私有化构造器,防止外部创建随意创建Season对象
	private Season2(String seasonName , String seasonDesc) {
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}

	public String getSeasonName() {
		return seasonName;
	}
	
	public String getSeasonDesc() {
		return seasonDesc;
	}
}

public class EnumeTest_02 {
	public static void main(String[] args) {
		Season1 spring = Season1.SPRING;
		System.out.println(spring);
		//SPRING 默认的toString()打印的是对象的名字 
		
		System.out.println(spring.getClass().getSuperclass());
		//class java.lang.Enum 定义的枚举类默认继承的是java.lang.Enum类
	}
}

enum类的常用方法:

  • toString():返回当前枚举类对象的名称
  • values(): 返回枚举类型的对象数组,该方法可以很方便的便利所有的枚举值
  • valuesOf(String enumname):根据提供的enumname,返回与enumname相同名字的枚举类对象

使用enum关键字实现的枚举类实现接口:

第一种:可直接在枚举类中实现接口方法

:这个方法与普通类实现接口完全一样。
为了便于阅读,我把冗长的封装方法,私有属性都删去了。

interface infor1{
	void show();
}
enum Season2 implements infor1{
	//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
	SPRING("春天" ,"春暖花开"),
	SUMMER("夏天" ,"夏日炎炎"),
	AUTUMN("秋天" ,"秋高气爽"),
	WINNTER("冬天" ,"冰天雪地");
	
	public void show() {
		System.out.println("调用show方法");
	}
}

第二种:实例化枚举类对象时,每个对象分别去实现接口方法

:如果需要每个枚举值在调用同一个方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,每个枚举值提供不同的实现方式,从而让不同枚举值调用同一个方法时具有不同的行为方式

interface infor{
	void show();
}

enum Season1 implements infor{
	//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
	SPRING("春天" ,"春暖花开"){
		public void show() {
			System.out.println("春天在哪里");
		}
	},
	SUMMER("夏天" ,"夏日炎炎"){
		public void show() {
			System.out.println("宁夏");
		}
	},
	AUTUMN("秋天" ,"秋高气爽"){
		public void show() {
			System.out.println("秋天不回来");
		}
	},
	WINNTER("冬天" ,"冰天雪地"){
		public void show() {
			System.out.println("大约在冬季");
		}
	};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值