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