什么是枚举
枚举是一种特殊类
格式:
修饰符 enum 枚举类名{
名称1,名称2,...; //枚举类的第一行必须罗列的是枚举对象的名字
其他成员...
}
- 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
- 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象
- 枚举都是最终类,不可以被继承
- 枚举类中,从第二行开始,可以定义类的其他各种成员
- 编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法
- 枚举的应用场景:做信息标志和分类
例:
public enum A {
A,B,C; //罗列枚举对象的名字
private String name;
public void setName(String name) {
this.name = name;
}
public void Myname(){
System.out.println(this.name);
}
}
public class Test {
public static void main(String[] args) {
A a = A.B; //枚举类对象创建,使用罗列的枚举对象名字
a.setName("小明"); //类方法正常使用
a.Myname();
//编译器为枚举类新增的和从enum类继承到的一些方法
A[] as = A.values(); //拿到全部对象
A a2 = A.valueOf("C"); //根据名字拿到对象
System.out.println(a2.name()); //拿到对象名字 C
System.out.println(a2.ordinal()); //拿到对象索引 2,也就是罗列名字时的顺序,从0开始
}
}
抽象枚举
也就是带有抽象方法的枚举类,需要在罗列对象名字时实现该抽象方法
例:
public enum B { //抽象枚举
X{
@Override //实现抽象方法
public void say() {
}
}
,Y("小明"){ //通过有参构造器赋初值
@Override
public void say() {
System.out.println("我是"+getName());
}
};
private String name;
B() {
}
B(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void say(); //抽象方法
}
public class Test2 {
public static void main(String[] args) {
B b = B.Y;
b.say();
}
}