enum關鍵字與class和interface地位相同,其同樣有成員變量、方法、能夠實現一個或多個接口,也能夠有構造器
vue
枚舉類與普通類的區別
- 枚舉類的父類是java.lang.Enum類
- 非抽象枚舉類默認使用final修飾,不能存在子類
- 枚舉類的構造器只能使用private修飾符,默認就是private
- 枚舉類的全部實例必須在枚舉類的第一行顯式列出,不然這個枚舉類永遠不能產生實例,列出的實例,系統會自動添加public static final修飾
抽象的枚舉類,系統默認使用abstract修飾,而不用final修飾java
package com.em;public enum EmFestival { //會產生以下四個實例
SPRING,SUMMER,FALL,WINTER;
}
枚舉值就表明可能會產生的實例vuex
package com.em;public class FestivalTest { public static String jude(EmFestival v){ switch (v) { case SPRING: return "春天"; case SUMMER: return "夏天"; case FALL: return "秋天"; case WINTER: return "冬天";
} return null;
} public static void main(String[] args) {
System.out.println(jude(EmFestival.SPRING));
}
}
爲何使用枚舉類?
- 存在命名空間,能夠將其餘的靜態常量區分開
- 打印輸出的意義明確,不想普一般量那樣,都用數字表示含義,沒法直接表達含義
枚舉類方法
- compare(E o):用於與指定的枚舉對象比較順序,同一個枚舉實例只能與相同類型的枚舉實例進行比較。若是該枚舉對象位於指定枚舉對象以後,則返回正整數
- name():返回此枚舉實例的名稱
- ordinal():返回枚舉值在枚舉類中的索引值(從0開始)
- toString():與name方法一致,推薦使用toString
- valueOf():一個靜態方法,用於返回指定枚舉類中指定名稱的枚舉值
package com.em;public enum EmFestival { //會產生以下四個實例
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); private final String fest; private EmFestival(String fest){ this.fest=fest;
} public String getFest() { return fest;
}
}
實現接口的枚舉類
枚舉類實現接口,與正常類沒有什麼區別微信
package com.em;import java.io.FileDescriptor;import java.io.IOException;import sun.nio.ch.SelChImpl;import sun.nio.ch.SelectionKeyImpl;public enum EmFestival implements SelChImpl{// 會產生以下四個實例
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); @Override
public boolean isOpen() { // TODO Auto-generated method stub
return false;
} @Override
public void close() throws IOException { // TODO Auto-generated method stub
} @Override
public FileDescriptor getFD() { // TODO Auto-generated method stub
return null;
} @Override
public int getFDVal() { // TODO Auto-generated method stub
return 0;
} @Override
public void kill() throws IOException { // TODO Auto-generated method stub
} @Override
public void translateAndSetInterestOps(int arg0, SelectionKeyImpl arg1) { // TODO Auto-generated method stub
} @Override
public boolean translateAndSetReadyOps(int arg0, SelectionKeyImpl arg1) { // TODO Auto-generated method stub
return false;
} @Override
public boolean translateAndUpdateReadyOps(int arg0, SelectionKeyImpl arg1) { // TODO Auto-generated method stub
return false;
} @Override
public int validOps() { // TODO Auto-generated method stub
return 0;
} private final String fest; private EmFestival(String fest){ this.fest=fest;
} public String getFest() { return fest;
}
}
包含抽象方法的枚舉類
枚舉類裏定義抽象方法時不能使用abstract關鍵字將枚舉類定義成抽象類(由於系統自動會添加abastract),但由於枚舉類須要顯式建立枚舉值,而不是做爲父類,因此定義每一個枚舉值時必須爲抽象方法提供實現,不然出現編譯錯誤markdown
package com.em;public enum EmFestival { // 會產生以下四個實例
SPRING("春天") { @Override
public String getFestival() { return "春天";
}
},
SUMMER("夏天") { @Override
public String getFestival() { return "夏天";
}
},
FALL("秋天") { @Override
public String getFestival() { return "秋天";
}
},
WINTER("冬天") { @Override
public String getFestival() { return "冬天";
}
}; public abstract String getFestival(); private final String fest; private EmFestival(String fest) { this.fest = fest;
} public String getFest() { return fest;
}
}
更多內容能夠關注微信公衆號,或者訪問AppZone網站app
本文分享自微信公衆號 - 跡說(Lets_Talk_About)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。ide