package com.fawa.test;
//定义接口
interface Info {
void show();
}
/**
* 使用关键字enum定义枚举类
* 在java类中定义枚举类如下:
* public class User {
* public enum UserStatus {
* //省略部分代码
* }
* }
*/
public enum UserStatus implements Info {
/**
* 枚举类也是java类,可以声明属性、方法(构造方法只能是私有的)、可以实现接口,但是不能继承(默认继承了java.lang.Enum),也不能被继承(默认使用final修饰)
* LOCK,NORMAL 实际是 UserStatus的单例模式,如 public static final UserStatus LOCK = new UserStatus("0","锁定状态")
* 如果枚举不需要属性,则可以声明一个无参的构造方法,然后定义一个无属性的枚举值,如OTHER
* 枚举类实现接口后,可以分别在每个对象中实现接口方法
*/
LOCK("0", "锁定状态"){
@Override
public void show() {
System.out.println("用户被锁定了");
}
}, NORMAL("1", "正常状态"){
@Override
public void show() {
System.out.println("用户正常");
}
}, OTHER{
@Override
public void show() {
System.out.println("其他情况");
}
};
private String statusCode;
private String statusName;
private UserStatus(){}
private UserStatus(String statusCode,String statusName){
this.statusCode = statusCode;
this.statusName = statusName;
}
public String getStatusCode() {
return statusCode;
}
public String getStatusName() {
return statusName;
}
/**
* 如果不重写toString方法,在调用枚举的时候,是输出的枚举名
* 如UserStatus.LOCK,将输出LOCK
*/
@Override
public String toString() {
return "UserStatus [statusCode=" + this.statusCode + ", statusName=" + this.statusName + "]";
}
@Override
public void show() {
System.out.println("UserStatus"); //如果枚举类的每个对象没有各自实现接口,则会统一调用本方法
}
public static void main(String[] args) {
UserStatus[] userStatusArray = UserStatus.values(); //获取UserStatus枚举类下的所有枚举对象数组
System.out.println(UserStatus.LOCK); //得到枚举名为LOCK对象,会调用toString()方法
System.out.println(UserStatus.LOCK.name()); //得到枚举对象的枚举名
UserStatus LOCK = UserStatus.valueOf("LOCK"); //传入枚举名,得到LOCK对象
UserStatus.OTHER.show(); //调用枚举类实现的接口方法
}
}