关于枚举的理解

package com.an.testenum;
/*
 * JDK1.5之后:
 * 声明格式:
 * 【修饰符】 enum 枚举类名{
 * 		常量对象列表(每一个对象之间使用,分割)
 * }
 * 
 * 要求:
 * 1、常量对象列表必须在首行
 * 2、如果常量对象列表后面还有其他的代码,那么需要在常量对象列表后面加;
 * 
 * 特点:
 * 1、枚举类型也是类,只不过有点特殊
 * (1)声明关键字是enum,替代原来class
 * (2)对象已经在枚举类中创建好了,不能在外面创建了
 * (3)枚举类型中可以声明一个或重载的多个构造器,但是必须全部私有化
 * (4)这个类默认不是继承Object,而是Object下面的java.lang.Enum类型
 * 
 * java.lang.Enum类型:这是所有 Java 语言枚举类型的公共基本类。 
 * (1)toString()返回枚举的常量名
 * (2)name():返回枚举的常量名
 * (3)ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
 * API中没有,是编译增加的
 * 枚举类型[] values():返回所有的枚举的常量对象
 * 枚举对象  valueOf("枚举常量名"):返回的是某个枚举常量对象
 * 
 * Enum类型没有无参构造,子类默认调用的是它的有参构造
 * 
 * 首行:
 * this(),this(实参列表)
 * super(),super(实参列表)
 * package 包名;
 * 枚举的常量对象列表
 */

public class TestEnum5 {
	public static void main(String[] args) {
		Week1 mon = Week1.MONDAY;
		System.out.println(mon);//调用的toString方法  MONDAY:
		System.out.println(mon.name());//返回常量名  MONDAY
		System.out.println(mon.ordinal());//返回枚举常量的序数  0
		
		
		Week1 sun = Week1.SUNDAY;
		System.out.println(sun);//星期天:放假
		System.out.println(sun.name());//SUNDAY
		System.out.println(sun.ordinal());//6
		
		Week1[] values = Week1.values();
		for (Week1 week1 : values) {
			System.out.println(week1);
			/*  MONDAY:
				TUESDAY:
				WEDNESDAY:
				THURSDAY:
				FRIDAY:
				SATURDAY:
				星期天:放假
			*/
		}
	}
}

enum Week1{
	MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY("星期天","放假");
	
	private String name;
	private String desc;
	
	private Week1(){
		this.name = name();
		this.desc = "";
	}
	
	private Week1(String name){
		this.name = name;
	}
	
	private Week1(String name,String desc){
		this.name = name;
		this.desc = desc;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return name + ":" + desc;
	}
	
}


枚举也可以实现接口:

package com.an.testenum;

/*
 * 枚举也可以实现接口
 */
public class TestEnum3 {
	public static void main(String[] args) {
		Gender m = Gender.MAN;
		Gender w = Gender.WOMAN;
		
		m.walk();
		w.walk();
	  //输出
		//男人走路
		//女人走路
	}
}

interface Walk{
	void walk();
}

enum Gender implements Walk{
	MAN{
		@Override
		public void walk() {
			// TODO Auto-generated method stub
			System.out.println("男人走路");
		}
	},WOMAN{
		@Override
		public void walk() {
			// TODO Auto-generated method stub
			System.out.println("女人走路");
		}
	};

	@Override
	public void walk() {
		System.out.println("走路");
	}
	
}

枚举内的一些元素可以看做为一个构造器。调用时可以想象一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值