枚举
我发现,很多讲枚举的地方,只是讲枚举怎么用,并没有将枚举的性质讲清楚
使用
使用我相信各位都没什么困难,如果没有用过枚举的话,我相信,在看完性质后,就知道怎么使用了。
性质
枚举类中的每一个对象,都相当于一个内部类,调用枚举的对象的时候,会实例化其中所有对象
仅调用 RED:
public class Demo1 {
enum Color {
RED,GREEN,YELLOW;
Color() {
System.out.println(this.toString());
}
}
public static void main(String[] args) {
Color red = Color.RED;
}
}
三个对象的构造函数,都被调用:
枚举对象枚举类中的所有方法和属性,都和枚举类一样
上面说到,每一个枚举对象,都相当于一个内部类,那么,这个内部类,其实就是一个个实例化的枚举类。
所以,枚举类中的所有方法,枚举对象中,都有:
public class Demo1 {
enum Color {
RED{
},
GREEN {
},
YELLOW {
};
Color() {
this.color=this.toString();
}
private String color;
public void outColor() {
System.out.println(this.color);
}
}
public static void main(String[] args) {
Color red = Color.RED;
/**
* 枚举对象,调用方法
* 方法和枚举类中的方法一致
*/
red.outColor();
}
}
也正因为每个枚举对象都是实例化的当前枚举类,所以,
如果枚举类中存在抽象方法的话,每个枚举对象都要去实现这个抽象方法:
public class Demo1 {
enum Color {
RED{
/**
* 每个枚举对象,都要去实现枚举类中的抽象方法
*/
@Override
void abstractMethod() {
System.out.println("this is red");
}
},
GREEN {
/**
* 每个枚举对象,都要去实现枚举类中的抽象方法
*/
@Override
void abstractMethod() {
System.out.println("this is green");
}
},
YELLOW {
/**
* 每个枚举对象,都要去实现枚举类中的抽象方法
*/
@Override
void abstractMethod() {
System.out.println("this is yellow");
}
};
Color() {
this.color=this.toString();
}
private String color;
public void outColor() {
System.out.println(this.color);
}
/**
* 枚举类中的抽象方法
*/
abstract void abstractMethod();
}
public static void main(String[] args) {
}
}