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