假设现在我们想给小明添加一个状态(跑步、学习、睡觉),外部可以实时获取小明的状态:
public class Student extends Person implements Study {
private String status; //状态,可以是跑步、学习、睡觉这三个之中的其中一种
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
但是这样会出现一个问题,如果我们仅仅是存储字符串,似乎外部可以不按照我们规则,传入一些其他的字符串。这显然是不够严谨的,有没有一种办法,能够更好地去实现这样的状态标记呢?我们希望开发者拿到使用的就是我们预先定义好的状态,所以,我们可以使用枚举类来完成:
public enum Status { //enum表示这是一个枚举类,枚举类的语法稍微有一些不一样
RUNNING, STUDY, SLEEP; //直接写每个状态的名字即可,最后面分号可以不打,但是推荐打上
}
枚举类型的本质就是一个普通的类,但是它继承自Enum
类,我们定义的每一个状态其实就是一个public static final
的Status类型成员变量。
因此我们可以给枚举类型添加独有的成员方法:
public enum Status {
RUNNING("睡觉"), STUDY("学习"), SLEEP("睡觉"); //无参构造方法被覆盖,创建枚举需要添加参数(本质就是调用的构造方法)
private final String name; //枚举的成员变量
Status(String name){ //覆盖原有构造方法(默认private,只能内部使用!)
this.name = name;
}
public String getName() { //获取封装的成员变量
return name;
}
}