Java中有一种特殊的类型,枚举类型,它可以帮助我们定义你不确定的变量,今天我们就来了解一下枚举的继承问题,到底,枚举可以被继承吗?
枚举基础定义
枚举值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号或无符号整数类型。字段是静态文本字段,其中的每一个字段都表示常数。所使用的语言给每个字段都分配一个基础类型的特定值。
枚举作用
1. 限定“数据集”中的元素的个数,即限定枚举类对象的个数。
2. 让数值看起来更直观,
枚举类与普通类的区别:
1.枚举类也是类,也可以有自己的成员变量,成员方法,静态方法、静态变量等,也能实现其他的接口,不能继承其他类了。枚举类的对象默认都是public static final
2. 枚举类与普通类的不同在于,它的构造器私有,这也决定了它如果需要被继承时的特殊性。若果其它的外部类A继承它,由于在构造类A的对象时,需要调用父类的构造方法,由于枚举类的构造器私有,所有无法调用,导致枚举类不可以被其它的外部类继承。需要使用到内部类才可以。
例:
public enum TrafficLamp { //由于枚举值默认式public,final,static,按照规范变量名全部大写 //正是由于枚举值的这一特性,为我们实现单列提供了一种很好的方案 //注意此时的枚举值都是引用,相当于public static final TrafficLamp RED = new //TrafficLamp(); RED { //匿名内部类,RED指向继承了TrafficLamp的子类对象,以下同理 public TrafficLamp state() { try { Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); } return GREEN; } }, GREEN { public TrafficLamp state() { try { Thread.sleep(60000); } catch (InterruptedException e) { e.printStackTrace(); } return YELLOW; } }, YELLOW { public TrafficLamp state() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return RED; } }; private TrafficLamp() {} private TrafficLamp(int time) {} public abstract TrafficLamp state(); //简单的模拟 } public static void main(String[] args) { Boolean flag = true; While(flag) { RED.state() .state() .state(); }
以上就是关于枚举继承的所有内容了,更多Java一些知识问答的小知识,请持续关注我们的网站吧。