java自学笔记——枚举类

1.实例有限且固定的类在java中被称为枚举类

2、枚举类和普通类的区别

(1)枚举类默认继承java.lang.Enum类,而不是Object类,因此枚举类不能显式的继承其它类。java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

(2)使用enum定义、非抽象的枚举类默认会使用final修改,因此枚举类不能派生出子类。

(3)枚举类的构造器只能使用private访问控制符

(4)枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远不能产生实例,列出这些实例时,系统会自动添加public static final修饰。

3,实现接口的枚举类

package com.algorithm;

public interface StudentInterface {
      public void info();
}
package com.algorithm;

public enum StudentEnum implements StudentInterface{
	MALE("男同学"){
		public void info() {
			System.out.println("代表男生。。。");
		}
	},
	FEMALE("女同学"){
		public void info() {
			System.out.println("代表女生。。。");
		}
	};
	private final String name;
	
	public String getName() {
		return this.name;
	}
	//枚举类的构造器只能使用private修饰
	private StudentEnum(String name){
		this.name = name;
	}
}
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式;如果需要每个枚举值在调用该方法时呈现不同的行为方式,则可以让每个枚举值分别实现该方法。如上实例,类似于匿名内部类。

4.包含抽象方法的枚举类

package com.algorithm;

public enum OperationEnum {
	PLUS{
		public double eval(double x,double y){
			return x+y;
		}
	},
	MINUS{
		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;
		}
	};
	public abstract double eval(double x,double y);
	
	public static void main(String[] args) {
		for (OperationEnum o : OperationEnum.values()) {
			System.out.println(o.eval(6, 3));
		}
	}
}
在枚举类中定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(系统会自动加abstract关键字),而枚举类需要显示的创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现。

你可能感兴趣的:(Java)