天天看點

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關鍵字),而枚舉類需要顯示的建立枚舉值,而不是作為父類,是以定義每個枚舉值時必須為抽象方法提供實作。