enum:枚举,java在JDK1.6版本时添加枚举类型,在java中枚举就是一个特殊的类(作用:让代码看起来更直观)
(枚举不能继承,枚举可以定义成员变量和成员方法,可以实现接口)
枚举与普通类区别
1.枚举不能通过new实例化对象
枚举的构造方法都是私有的
枚举不能被继承,枚举是被final修饰的
枚举不能继承类,但是可以实现接口
枚举可以在switch分支中使用 (在switch可以使用的引用数据类型只有String和枚举)
枚举默认的父类是Enum类(不再是Object)
eg:
enum Color{
//RED就是 一个Color对象
//等同于 public static final Color RED = new Color(); //默认无参构造方法(RED全局静态常量一般全大写)
//默认情况下,枚举对象都是通过默认的构造方法创建;如果我们自定了构造方法,此处就需要使用我们自定义的构造方法了
RED(1,"红色"), //RED,(默认调无参的构造方法) RED(1,"红色"), 自定义了构造方法
YELLOW(2,"黄色"),
绿色; //无参的构造方法 (此处注意不用;结尾,若之下还有内容需加;)
//自定义属性
private int index;
private String name;
//通过自定义构造方法为属性赋值
//枚举中定义的构造方法,默认的访问控制符为private,如果显示的添加,也只能用private
Color(int index, String name){
this.index = index;
this.name = name;
}
Color(){
}
//一般情况下,枚举的属性值,在创建枚举对象时赋值,后续最好不要修改
public int index() {
return index;
}
public String getName() { //此处name()报错,因为父类中有同名的无参无返回值的方法,且被final修饰,不能重写
return name;
}
}
interface Color2{
int RED = 0;
}
public class MyEnum {
public static void tt(Color color) {
}
public static void main(String[] args) {
// tt(Color.绿色);
Color color = Color.RED; //(此时调用的是父类中的)
//获取定义的位置
int ordinal = color.ordinal();
System.out.println(ordinal); //0
//获取枚举名称
String name = color.name();
System.out.println(name); //RED (字符串)
System.out.println(color.index());
System.out.println(color.getName());
//Color c = new Color(); //报错
switch(color) {
case RED:
System.out.println("红色");
break;
case YELLOW:
System.out.println("黄色");
break;
}
}
}