枚举可以被继承吗?枚举的定义及区别

TheDisguiser 2020-04-15 18:05:28 java常见问答 9057

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一些知识问答的小知识,请持续关注我们的网站吧。