枚举类型
枚举类型的本质还是一个类,默认是final修饰的,且默认继承自父类java.lang.Enum,构造器是自动生成的且是私有的,表示不可创建对象,使用反射也不行。
public enum User {
STUDENT,TEACHER;
}
STUDENT和TEACHER是枚举元素,每一个枚举元素都是这个枚举类的一个实例,默认是用public static final修饰的
获得枚举对象
1.User u = User.STUDENT;
2.User u = User.valueOf(“STUDENT”);
3.User u = Enum.valueOf(User.class,“STUDENT”);
且无论通过何种方式取得的对象,都是同一个对象,即通过= =去比较地址值,都是一样的,结果是true
获得一个枚举类型的所有对象
User[] values = User.values();
for(User u:values){
System.out.println(u);
}
枚举类型的方法
枚举对象默认只能调用父类Enum中的方法或者Object中的方法,但是也可以自定义方法。枚举也是类,所以枚举中也可以写方法,包括静态方法。
public class TestObj{
public static void main(String[] args){
User u = User.STUDENT;
u.say();
User.run();
}
}
enum User {
STUDENT,TEACHER;
public void say() {
System.out.println("say");
}
public static void run() {
System.out.println("run");
}
}
枚举类型也可以定义在自己的属性,枚举类型中可以定义构造器,但是必须是私有的,默认也是私有的.
枚举类型可以写抽象方法
枚举类型中可以编写抽象方法,但是这时候其每个对象都必须去实现这个抽象方法,否则编译报错。
public class TestObj{
public static void main(String[] args){
User u = User.STUDENT;
u.stop();
}
}
enum User {
STUDENT {
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("stop");
}
},TEACHER {
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("stop");
}
};
public abstract void stop();
}
枚举类型可以实现接口
枚举类型实现接口后,必须实现接口中的所有方法,或者在每个对象中分别实现接口中所有方法。