/*
* 枚举类实际上也是一种类,只不过是有限个对象,固定几个,不能让用户随意创建
* 例如:星期,月份,季节,支付方式(wx zfb 银行卡 现金),性别
* jdk5.0之前需要自定义枚举类型
* jdk5.0之后使用enum定义
* 开发中建议,如果一个类的实例是有限个,推荐将此类声明为枚举类
* 如果枚举类的实例只有一个,那么可以看作单例的实现方式
*
* */
public class enumTest {
public static void main(String[] args) {
//研究其父类Enum中的常用方法
//测试方法1:toString()
// System.out.println(Season.SPRIING);//静态方法直接由类调用,在没改写toString()方法时,运行结果为变量名SPRING
System.out.println(Season.SPRIING);//重写后
//2:重写后还想调用变量名字则使用name(),父类所含方法
System.out.println(Season.SPRIING.name());//SPRING
//方法3:values()
Season values[]=Season.values();//将所以变量放入数组
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
//方法4:valuesOf(String objName),返回与objName相同的枚举类对象
String obj = "WINTER";//String obj = "WINTER1";写成不存在的会异常
Season season1 = Season.valueOf(obj);
System.out.println(season1);
//方法5:int ordinal返回位置从0开始
System.out.println(Season.SPRIING.ordinal());
//输出为0;
}
}
enum Season{
// 存在一个默认父类java.lang.Enum,不要继承Object,(其实Enum的父类为Object)
//故不要再定义其父类否则报错
//必须在枚举类的开头声明多个对象,对象之间用,隔开
SPRIING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUNM("秋天","硕果累累"),
WINTER("冬天","白雪皑皑");
private final String SeasonName;//季节的名字
private final String SeasonDesc;//季节的描述
Season(String SeasonName,String SeasonDesc){
this.SeasonName=SeasonName;
this.SeasonDesc=SeasonDesc;
}
public String getSeasonName() {
return SeasonName;
}
public String getSeasonDesc() {
return SeasonDesc;
}
@Override
public String toString() {
return "Season{" +
"SeasonName='" + SeasonName + '\'' +
", SeasonDesc='" + SeasonDesc + '\'' +
'}';
}
}
--------------------------------------------------------------------------
//枚举类实现接口的操作
//1:枚举类中实现接口,在枚举类中重写接口的抽象方法,当不同枚举类对象执行此方法时,执行的是同一个方法
//2:让枚举类的每个对象去重写接口方法,此时通过执行可得不同方法
public class SeasonTest{
public static void main(String[] args) {
//通过枚举类对象实现方法重写后调用(情况1)
Season1.SPRIING.show();//四个对象执行一样的方法
//情况2:
Season1 values []=Season1.values();
for (int i = 0; i <values.length;i++) {
values[i].show();
}
}
}
interface Info{
void show();
}
enum Season1 implements Info{
// SPRIING("春天","春暖花开"),
// SUMMER("夏天","夏日炎炎"),情况1
// AUTUNM("秋天","硕果累累"),
// WINTER("冬天","白雪皑皑");
SPRIING("春天","春暖花开"){
public void show(){
System.out.println("春天在哪里");
}
},//分隔符别漏了
SUMMER("夏天","夏日炎炎"){
public void show(){
System.out.println("宁静的夏天");
}
},
AUTUNM("秋天","硕果累累"){
public void show(){
System.out.println("秋意浓");
}
},
WINTER("冬天","白雪皑皑"){
public void show(){
System.out.println("大约在冬季");
}
};
//以上实现了各种方法的重写
private final String SeasonName;//季节的名字
private final String SeasonDesc;//季节的描述
Season1(String SeasonName,String SeasonDesc){
this.SeasonName=SeasonName;
this.SeasonDesc=SeasonDesc;
}
public String getSeasonName() {
return SeasonName;
}
public String getSeasonDesc() {
return SeasonDesc;
}
@Override
public String toString() {
return "Season{" +
"SeasonName='" + SeasonName + '\'' +
", SeasonDesc='" + SeasonDesc + '\'' +
'}';
}
public void show(){
System.out.println("这是一个季节");
}
}