java语言基础(102)——深入理解java枚举类(自己实现枚举 VS java原生提供枚举)

枚举类的应用场景

某些情况下,我们有固定的几个选项供选择,在没有枚举类之前,我们一般都选择定义为几个常量,而有枚举后,则可以用枚举来解决。比如我们在设计一个小游戏的时候,会用到有限的几个方向,每个方向定义了不同的动作,所以这个方向类就是有限个实例的情况,我们可以用枚举实现,或模拟枚举实现。

自己实现枚举:

package EnumDemo;

public abstract class Director {
	
 // 提供有限的几个选项	
 // 抽象类本不可以new 但此处用匿名内部类的形式实现了Director中的move方法
 // 表面上看似是new了一个Director,实际是new的它的子类对象,用Director接收
 // 用的是多态的思想	
 public static final Director UP = new Director("UP"){
	@Override
	public void move() {
		 System.out.println("向上走");
	} 
 };
 public static final Director DOWN = new Director("DOWN"){
	@Override
	public void move() {
		System.out.println("向下走");
	}
 };
 public static final Director LEFT = new Director("LEFT"){
	@Override
	public void move() {
		System.out.println("向左走");
	}
 };
 public static final Director RIGHT = new Director("RIGHT"){
	@Override
	public void move() {
		System.out.println("向右走");
	} 
 };
 
 private String name;
 private Director(String name){
	 this.name = name;
 }
 public String getName(){
	 return this.name;
 }
 
 // 不同的方向在调用move时处理不同    所以这里定义为抽象方法
 public abstract void move();
 
}
测试demo:

package EnumDemo;

public class DirectorDemo {
 
	public static void main(String[] args) {
		 Director d = Director.UP;
		 System.out.println(d.getName());// UP
		 d.move(); // 向上走
	}

}

java原生枚举:

package EnumDemo;

public enum DirectorEnum {
 // 枚举项
 UP("UP"){

	@Override
	public void move() {
	 System.out.println("向上走");
	}
	 
 },
 // 带参构造 并且匿名内部类的方式实现抽象方法
 DOWN("DOWN") {
	@Override
	public void move() {
		System.out.println("向下走");
	}
},
LEFT("LEFT") {
	@Override
	public void move() {
	    System.out.println("向左走");
	}
},
RIGHT("RIGHT") {
	@Override
	public void move() {
		System.out.println("向右走");
	}
};
 private String name;
 private DirectorEnum(String name){
	 this.name = name;
 }
 public String getName(){
	 return this.name;
 }
 public abstract void move();
}

测试demo:

package EnumDemo;

public class DirectorEnumDemo {

	public static void main(String[] args) {
		 DirectorEnum dd = DirectorEnum.DOWN;
		 System.out.println(dd.getName());// DOWN
		 dd.move();// 向下走
	}

}

注:枚举中不一定要有抽象方法,此例中的抽象方法只是为了说明枚举类的高级用法。


枚举的注意事项:

定义枚举类要用关键字enum

所有枚举类都是Enum的子类

枚举类的第一行必须是枚举项

枚举类可以有构造器,但必须是private,其默认也是private

枚举类也可以有个抽象方法,但枚举项必须重写该方法


猜你喜欢

转载自blog.csdn.net/wang740209668/article/details/78369832