枚举
枚举:Enum子类,final修饰 自jdk5.0
常用方法:
values(); 获取枚举类内的所有枚举值,返回当前枚举类类型的数组
name(); 获取枚举值(枚举类的对象)的名字
ordinal();获取枚举值的序号
枚举语法:
①在最最后的枚举值后加分号,然后定义属性、方法、构造方法
②枚举的构造方法,必须为私有,默认也是私有
③枚举内的抽象方法,该方法必须由每个枚举值来实现(可用内部类实现)
1).创建枚举类
①:是个类,并且这个类的对象是构造好的,不允许用户构造该类的新对象
常用方法:
values(); 获取枚举类内的所有枚举值,返回当前枚举类类型的数组
name(); 获取枚举值(枚举类的对象)的名字
ordinal();获取枚举值的序号
用法:
//enum 继承自Enum
enum Season { //创建枚举类Season
SPRING , SUMMER , AUTUMN ,WINTER
}
main: Season s = Season.SUMMER;
System.out.println(s.name());//打印s对象的名称
System.out.println(s.ordinal());//打印s对象所在的序号
//遍历枚举类内的枚举值
Season[] arrSeason = Season.values();
for(Season ss : arrSeason) {
System.out.println(ss.name());
}
2).枚举类的构造方法
②:是个特殊的类,是Enum的子类,它所有的构造方法是私有的(private,不能被子类继承的特性),可以有属性,一旦有有参构造,则需要其内部的枚举值(枚举对象)也需要构造
用法:
//enum 继承自Enum
enum Season {
SPRING("春季", 1, 3),
SUMMER("夏季", 4, 6),
AUTUMN("秋季", 7, 9),
WINTER("冬季", 10, 12); //构造后,最后一个对象需要有“;”
String name;
private int startMonth;
private int endMonth;
//省略getters/setters
Season(String name, int startMonth, int endMonth) {//构造方法,默认private
this.name= name;
this.startMonth = startMonth;
this.endMonth = endMonth;
}
}
main(): Season s = Season.SUMMER;
System.out.println(s.getName() + “开始月份是” + s.getStartMonth());
3).枚举类的抽象方法
③:枚举类的内部可以有抽象方法。枚举类的本身是被final修饰的,不能被继承,故不存在子类实现其抽象方法。
所以其抽象方法是供内部的枚举值(枚举对象)实现的
用法:
//enum 继承自Enum
enum Season {
SPRING("春季", 1, 3) {
@Override //覆盖抽象方法
public void describe() {
System.out.println("春燕衔春泥");
}
},
SUMMER("夏季", 4, 6) {
@Override //覆盖抽象方法
public void describe() {
System.out.println("夏天很炎热");
}
},
AUTUMN("秋季", 7, 9) {
@Override //覆盖抽象方法
public void describe() {
System.out.println("秋天落叶黄");
}
},
WINTER("冬季", 10, 12) {
@Override //覆盖抽象方法
public void describe() {
System.out.println("大雪深数尺");
}
};
String name;
private int startMonth;
private int endMonth;
//省略getters/setters
Season(String name, int startMonth, int endMonth) {//构造方法,默认private
this.name= name;
this.startMonth = startMonth;
this.endMonth = endMonth;
}
public abstract void describe();//一个方法实现描述
}
main(): Season s = Season.SUMMER;
s.describe ();