【Java】枚举

枚举

枚举:Enum子类,final修饰 自jdk5.0

常用方法:
		values(); 获取枚举类内的所有枚举值,返回当前枚举类类型的数组
		name(); 获取枚举值(枚举类的对象)的名字
		ordinal();获取枚举值的序号
枚举语法:
	①在最最后的枚举值后加分号,然后定义属性、方法、构造方法
	②枚举的构造方法,必须为私有,默认也是私有
	③枚举内的抽象方法,该方法必须由每个枚举值来实现(可用内部类实现)

1).创建枚举类

①:是个类,并且这个类的对象是构造好的,不允许用户构造该类的新对象
	常用方法:
		values(); 获取枚举类内的所有枚举值,返回当前枚举类类型的数组
		name(); 获取枚举值(枚举类的对象)的名字
		ordinal();获取枚举值的序号
	
	用法:
//enum 继承自Enum
enum Season { //创建枚举类Season
			SPRING , SUMMER , AUTUMN ,WINTER
}
main: 	Season s = Season.SUMMER;
		System.out.println(s.name());//打印s对象的名称
		System.out.println(s.ordinal());//打印s对象所在的序号
		//遍历枚举类内的枚举值
		Season[] arrSeason = Season.values();
		for(Season ss : arrSeason) {
			System.out.println(ss.name());
		}

2).枚举类的构造方法

②:是个特殊的类,是Enum的子类,它所有的构造方法是私有的(private,不能被子类继承的特性),可以有属性,一旦有有参构造,则需要其内部的枚举值(枚举对象)也需要构造
	
用法:
//enum 继承自Enum
enum Season {
	SPRING("春季", 1, 3),
	SUMMER("夏季", 4, 6),
	AUTUMN("秋季", 7, 9),
	WINTER("冬季", 10, 12); //构造后,最后一个对象需要有“;”
	
	String name;
	private int startMonth;
	private int endMonth;
	//省略getters/setters
	Season(String name, int startMonth, int endMonth) {//构造方法,默认private
		this.name= name;
		this.startMonth = startMonth;
		this.endMonth = endMonth;
	}
}
main():	Season s = Season.SUMMER;
		System.out.println(s.getName() + “开始月份是” + s.getStartMonth());

3).枚举类的抽象方法

③:枚举类的内部可以有抽象方法。枚举类的本身是被final修饰的,不能被继承,故不存在子类实现其抽象方法。
所以其抽象方法是供内部的枚举值(枚举对象)实现的
	
用法:
	//enum 继承自Enum
enum Season {
	SPRING("春季", 1, 3) {
		@Override  //覆盖抽象方法
		public void describe() {
			System.out.println("春燕衔春泥");
		}
	},
	SUMMER("夏季", 4, 6) {
		@Override //覆盖抽象方法
		public void describe() {
			System.out.println("夏天很炎热");
		}
	},
	AUTUMN("秋季", 7, 9) {
		@Override //覆盖抽象方法
		public void describe() {
			System.out.println("秋天落叶黄");
		}
	},
	WINTER("冬季", 10, 12) {
		@Override //覆盖抽象方法
		public void describe() {
			System.out.println("大雪深数尺");
		}
	};
	
	String name;
	private int startMonth;
	private int endMonth;
	//省略getters/setters
	Season(String name, int startMonth, int endMonth) {//构造方法,默认private
		this.name= name;
		this.startMonth = startMonth;
		this.endMonth = endMonth;
	}
	
	public abstract void describe();//一个方法实现描述
}
main():	Season s = Season.SUMMER;
		s.describe ();
posted @ 2020-09-08 17:45  JWnMing  阅读(194)  评论(0编辑  收藏  举报