enum关键字与class和interface地位相同,其一样有成员变量、方法、可以实现一个或多个接口,也可以有构造器
抽象的枚举类,系统默认使用abstract修饰,而不用final修饰
package com.em;
public enum EmFestival {
//会产生如下四个实例
SPRING,SUMMER,FALL,WINTER;
}
枚举值就代表可能会产生的实例
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));
}
}
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),但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则出现编译错误
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;
}
}