枚举和普通类的区别
枚举不能new创建对象,没有子类。 枚举的构造方法私有。
为什么要有枚举
单例模式有反射漏洞,可以通过反射创建。枚举解决,不能new,不能用反射。防止创建多个实例
注意点
构造器私有,如果传参,那么成员ONE(1)也有对应参数
也可以有抽象方法,
代码
public enum EnumTest{
//成员/对象
//数据字典
//两种表达方式
//男女/12
//两个实例(ONE、TWO)实例名称就是ONE、TWO
//放在代码首部
ONE(val:1),{
@Override
public String getSay(){
//this.say不能访问,因为是父类的
//虽然属性是父类私有的,但是因为匿名内部类,还是可以访问到
super.say="cba";
return super.say;
}
}
TWO(val:2),{
@Override
public String getSay(){
//this.say不能访问,因为是父类的
//虽然属性是父类私有的,但是因为匿名内部类,还是可以访问到
super.say="cba";
return super.say;
}
}
private String say = "abc";
public abstract String getSay();
}
//调用
psvm{
sout(EnumTest.ONE.name());//输出ONE==toString
sout(EnumTest.ONE.name());//输出序号 0
sout(EnumTest.ONE.getDeclaringClass());//Class test(包).EnumTest
sout(EnumTest.ONE.getClass());//Class test(包).EnumTest
sout(EnumTest.valueOf("ONE"));//输出ONE
public static void choice(EnumTest e){
switch(e){
case ONE:
sout("one");
case TWO:
sout("two");
}
}
}