/**
* 枚举类的使用
* 1。枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类
* 2.当需要定义一组常量时,建议使用枚举类
* 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式
* 如何定义枚举类
* 方式一:JDK 1.5之前 自定义枚举类
* 方式二:JDK 1.5之后 可以使用enum关键字定义枚举类
*
*/
public class Season {
//2.声明属性
//用final修饰的成员变量,必须在声明时或代码块中或构造函数中进行赋值
//但是在声明同时赋值或者代码块中赋值,赋值后不能改变,如果想改变 需要在构造方法中赋值
private final String seasonName;
private final String seasonDesc;
//1.私有化构造器给对象属性赋值
public Season(String s1,String s2){
this.seasonName=s1;
this.seasonDesc=s2;
}
//3.提供当前枚举类的多个对象
public static final Season SPRING=new Season("春天", "春暖花开");
public static final Season SUMMER=new Season("夏天", "夏日炎炎");
public static final Season AUTUMN=new Season("秋天", "秋高气爽");
public static final Season WINTER=new Season("冬天", "冰天雪地");
//4.有需要的话提供属性的get方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//5 toString
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
/**
* 使用enum关键字来定义枚举
*/
//用enum关键字
public enum Season2 {
//提供当前枚举类的对象 要求放在第一 之间用逗号 最后用分号
//默认是public static final的
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
private final String seasonName;
private final String seasonDesc;
private Season2(String s1,String s2){
this.seasonName=s1;
this.seasonDesc=s2;
}
//是否重写toString随意
public static void main(String[] args) {
//枚举类中的一些方法 toString 看是否重写 不重写 输出Enum中的toString
System.out.println(Season2.SPRING);//SPRING 说明重写了toString
//用enum关键字定义的枚举类 默认继承 java.lang.Enum
System.out.println(Season2.class.getSuperclass());
//values()方法 返回枚举类中的对象常量数组
Season2[] values = Season2.values();
for(Season2 season2:values){
System.out.println(season2);
}
System.out.println("----------------------------");
//valueOf(String str):可以把字符串转为对应的枚举类对象.要求字符串必须是枚举类型
//就是找指定枚举
Season2 season2 = Season2.valueOf("SUMMER");//如果枚举类里没有 字符串写错了 报错
System.out.println(season2);
}
}
枚举类继承接口
第一中情况 和类一样 重写方法
/**
* 使用enum关键字定义的枚举类实现接口情况
*/
public enum Season3 implements Info{
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
private final String seasonName;
private final String seasonDesc;
private Season3(String s1,String s2){
this.seasonName=s1;
this.seasonDesc=s2;
}
@Override
public void show() {
System.out.println("这是一个季节");
}
}
interface Info{
void show();
}
第二种情况,让枚举类里的每个对象都重写
/**
* 使用enum关键字定义的枚举类实现接口情况
*/
public enum Season3 implements Info{
SPRING("春天", "春暖花开"){
@Override
public void show() {
System.out.println("春天");
}
},
SUMMER("夏天", "夏日炎炎"){
@Override
public void show() {
System.out.println("夏天");
}
},
AUTUMN("秋天", "秋高气爽"){
@Override
public void show() {
System.out.println("春天");
}
},
WINTER("冬天", "冰天雪地"){
@Override
public void show() {
System.out.println("冬天");
}
};
private final String seasonName;
private final String seasonDesc;
private Season3(String s1,String s2){
this.seasonName=s1;
this.seasonDesc=s2;
}
public static void main(String[] args) {
Season3.WINTER.show();
}
}
interface Info{
void show();
}