【疯狂Java讲义】Java学习记录(枚举)

枚举(JDK 1.5才有)

- 用于代表【实例已经固定】的类,而且定义时就必须在【第一行】创建,并列出来。

[修饰符] enum 枚举名 implements 接口1, 接口2..., 接口N {
    //N个固定实例列表————而是调用相应的构造器创建实例。
                    ————如果枚举类是抽象的二,必须创建N个匿名内部类的实例。
    //零个~N个成员变量(Field)定义
    //零个~N个方法定义
    //初始化块
    //内部类、接口、枚举
}

-  修饰符可以是 public | 省略、abstract | final(必须出现一个

   所有的枚举都有一个values()方法,该方法返回所有的枚举实例

public enum Season {
	//下面这4个实例,相当于是public static final修饰的Field
	SPRING(), SUMMER(), FALL(), WINTER();
	
	public static void main(String[] args) {
		for (Season s : Season.values() ) {
			System.out.println(s);
		}
		Season.info(FALL);
	}
	
	public static void info(Season s) {
		//switch表达式必须是byte | short | char | int | String(JDK 7) | 枚举
		switch(s) {
			case SPRING:
				System.out.println("春暖花开");
				break;
			case SUMMER:
				System.out.println("夏日炎炎");
				break;
			case FALL:
				System.out.println("秋高气爽");
				break;
			case WINTER:
				System.out.println("白雪皑皑");
				break;
		}
	}
}

- 有了枚举以后,它的实例已经创建出来了,不允许用户创建实例,可以直接使用它的实例。

 - 枚举类可以有Field、方法、构造器(只能是private修饰)、初始化块

   列出枚举值,并不是简单地定义几个枚举值的变量名。而是调用枚举类的构造器来创建相应的实例。
 

包含抽象方法的枚举类

package day09;

//模拟一个算术运算
public enum Operation {
	// 列出所有枚举值——也就是该枚举类的所有可能的实例
	// 但实际上是调用相应的构造器来创建枚举实例
	// 还需要立即创建匿名内部类的实例
	//PLUS = new Operation() 
	PLUS(){
		public double eval(double x, double y) {
			return x + y;
		}
	},
	SUB(){
		public double eval(double x, double y) {
			return x - y;
		}
	}, 
	TIMES(){
		public double eval(double x, double y) {
			return x * y;
		}
	}, 
	DIVIDE(){
		public double eval(double x, double y) {
			return x / y;
		}
	};
	
	//如果枚举里已经有了抽象方法,该枚举类默认就有abstract
	//此时枚举类没有final修饰
	public abstract double eval(double x, double y);
	
	public static void main(String[] args) {
		System.out.println(Operation.TIMES.eval(2.3, 1.5));
	}
}

枚举可以实现接口

1、实现接口,并直接实现所有的抽象方法。此时枚举类就不再是抽象枚举了。

interface Directionable {
	void pointDirection();
}

public enum Orientation implements Directionable{
	EAST, SOUTH, WEST, NORTH;
	
	@Override
	public void pointDirection() {
		System.out.println("指向:" + this);
	}
}

2、实现接口,但并不直接实现抽象方法。此时枚举类就只能是抽象枚举。——就与上一个知识点相同了。

interface Directionable2 {
	void pointDirection2();
}

public enum Orientation2 implements Directionable2{
	EAST(){
		public void pointDirection2() {
			System.out.println("指向东方");
		}
	}, 
	SOUTH(){
		public void pointDirection2() {
			System.out.println("指向南方");
		}
	}, 
	WEST(){
		public void pointDirection2() {
			System.out.println("指向西方");
		}
	}, 
	NORTH(){
		public void pointDirection2() {
			System.out.println("指向北方");
		}
	};
	
	public static void main(String[] args) {
		Orientation2.WEST.pointDirection2();
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值