枚举是从什么类继承而来的类型

生活小百事通 2024年04月22日 阅读 (82)

枚举是很多面向对象语言都会有的一种类型,它可以将表达同一类型的变量组合成一个集合,组成一个常量集

在Java中也有枚举类型,是用enum关键字来表示的

枚举常用来表示一个常量集,用来限定变量的取值,只能在枚举的范围内,比如一年四季只有春、夏、秋、冬、一个星期只有周一到周日,这类固定的常量就比较适合用枚举来表达

当然你说我用静态的常量来表达行不行呢?也是可以的,只是枚举就是为这种场景而生的

枚举这种类型其实没什么存在感,大家在使用的时候也是使用最基本的用法,甚至很多人都不用枚举,至少我自己在写这篇文章之前是很少用 枚举类型的,经常会用静态常量来代替枚举,但枚举确实有他的好处,下面我们就一起来看一下

publicenumOrderState{ORDER_CONFIRM,ORDER_PAYED,ORDER_DELIVERY,ORDER_FINISH}

OrderState列举了订单的几种状态

  • ORDER_CONFIRM 订单已确认
  • ORDER_PAYED 订单已支付
  • ORDER_DELIVERY 订单已出库
  • ORDER_FINISH 订单已完成
OrderState orderState = OrderState.ORDER_FINISH;System.out.println(orderState);

在使用枚举类型时,需要定义一个枚举类型的对象,如上代码,执行结果如下:

ORDER_FINISH

枚举类型常用的方法

  • values() 返回所有的枚举值数组
  • ordinal() 表示枚举值在枚举类型中的次序,从0开始
  • compareTo() 用于比较两个枚举类型
  • name() 返回枚举值

在枚举的简单用法中,枚举类里面只定义了几个常量,其实枚举类型中还可以增加方法

publicenumOrderState { ORDER_CONFIRM(0,"订单已确认"),ORDER_PAYED(1,"订单已支付"),ORDER_DELIVERY(2,"订单已支付"),ORDER_FINISH(3,"订单已完成");privateintstate;privateString stateText; OrderState(intstate,String stateText){this.state = state;this.stateText = stateText; }publicintgetState(){returnstate; }publicStringgetStateText(){returnstateText; }publicstaticvoidmain(String[] args){for){ System.out.println(orderState +"|"+ orderState.getState +"|"+ orderState.getStateText); } }}

从上面的代码可以看出来,枚举类型可以有构造方法,也可以有普通方法,枚举跟类很像,或者说它就是一种拥有限制的类

枚举跟switch语句简直是天造地设的一对,switch中可以天然的支持枚举类型

switch(orderState){caseORDER_CONFIRM: System.out.println(orderState.getState());break;caseORDER_PAYED: System.out.println(orderState.getStateText());break;caseORDER_DELIVERY: System.out.println(orderState.getState());break;caseORDER_FINISH: System.out.println(orderState.getStateText());break;}

我们用编译/反编译的方法来看一下枚举到底是个什么鬼类型

首先编译OrderState.java文件,注意你的枚举类型中有中文需要加-encoding参数用UTF-8进行编码,否则会编译不通过

javac-encodingUTF-8OrderState.java

执行完成后,在同一目录下会生成一个OrderState.class文件,我们反编译回来

javap -p OrderState.class

会得到如下的代码

从反编译回来的内容,可以看出来,枚举类型本质是就是继承自Enum的final类,枚举中定义的常量就是类的静态常量

枚举可以继承吗?可以实现接口吗?

面试官就喜欢问类似的问题,如果你对枚举不了解,肯定就答不上来了

从上面反编译的结果来看,枚举本质是个final类并且继承自Enum,Java里面不支持多继承,所以枚举不能继承其他类,同时枚举是个final类,也不能被继承

但枚举可以实现接口,枚举本质上就是个类,所以它有类的一般特性

定义一个接口

publicinterfaceColor{publicStringgetColor();}

定义一个枚举类型,实现Color接口

输入结果:

绿色

1、枚举常量简单安全

不使用枚举的时候,我们是这样定义常量的

publicstaticfinalString RED ="红色";publicstaticfinalString GREEN ="绿色";publicstaticfinalString GRAY ="灰色";publicstaticfinalString YELLOW ="黄色";

这样使用看起来也没什么问题,可以达到常量的效果,但这个静态常量是不具有范围限定的,比如我有一个方法要限定只能传入指定的几个颜色,使用静态常量就无法限制范围,使用者可以随意传入静态常量,但如果使用了枚举就可以限定只能传入指定范围内的值

2、枚举有内置方法

如果要列出所有的常量,类和接口必须使用反射,比较繁琐,而枚举有内置的方法values()可以很方便的列举出静态常量

3、枚举的缺点

枚举不可继承,无法扩展,但枚举一般用来定义常量,也不需要扩展

精彩内容尽在问答鸭,如果您觉得这篇内容不错,别忘了分享给好友哦!

相关文章

  • 如何根据现状判断当下夫妻关系类型.

    如何根据现状判断当下夫妻关系类型

    1、爱情型。爱情型夫妻关系类型分为两种,一种是由美貌和型吸引导致结合。美貌和性魅力会逐渐减弱是这类型所存在的风险。

    2022-08-16 阅读 (214)
  • 如何为活字格创建登录用户单元格类型.

    如何为活字格创建登录用户单元格类型

    1、选择一片单元格后点击[开始][单元格类型],从下拉列表中选择[登录用户]类型。选择的单元格将会变成登录用户单元格类型。

    2022-07-19 阅读 (211)
  • input对象button类型如何使用type属性?.

    input对象button类型如何使用type属性?

    1、创建一个名称为button_type的html文件2、添加一个input元素设置input类型为button,设置id为obj_my_button_type3.4、在javascript中创建一个自定义函数my_button_type5、在自定义函数中通过id获取input对象。

    2022-07-04 阅读 (170)
  • 影响气候类型的因素.

    影响气候类型的因素

    1、首先要知道影响气候类型有那些因素的:热量降雨量纬度海拔经度2、热量判断气候类型中,热量是不可或缺的重要组成部分。

    2022-08-24 阅读 (170)
  • 房产继承过户费用及程序详解.

    房产继承过户费用及程序详解

    1、1、继承权公证费用:继承权公证费按照继承人所继承的房地产的评估价的2%来收取,最低不低于200元。

    2023-01-27 阅读 (155)
  • Excel内置图表类型的使用与实例模板分享.

    Excel内置图表类型的使用与实例模板分享

    1、如果接触过excel图表的小伙伴,相信对柱形图、折线图、饼图、条形图、散点图等几种常用的图表类型并不陌生,大家可以通过执行【插入】—【图表】可见不同类型图表,如下图一;如继续点开【图表】可以更加全面获知不同类型、不同形状的图表清单,如下图二所示。

    2023-03-09 阅读 (120)
  • bi决策分析系统FineBI不同图表类型查看指标.

    bi决策分析系统FineBI不同图表类型查看指标

    1、增加图表类型模板中的图表组件没有设置多个图表类型,我们首先给大区销售模板中的统计组件图表组件添加一个柱形图的类型。

    2022-08-11 阅读 (96)
  • OSPF网络类型之P2P.

    OSPF网络类型之P2P

    1、p2p的ospf网络类型ospf自动发现neighbor:组播/广播报文能够在p2plink上转发ospf在形成neighbor关系以后,就会直接同步lsdb,不选取dr/bdr不选取dr/bdr:一条link,只连接两个router,没必要选取全部使用组播(224.0.0.5)发送协议报文router只会使用224.0.0.5发送ospf报文retransmitlsa时,用的unicastpacket默认10s的hello发送间隔时间无32bits的主机路由2、目的:验证p2p网络类型的几种特性默认

    2023-04-03 阅读 (88)
  • 污染类型分为哪几类.

    污染类型分为哪几类

    二、环境污染的类型有哪些?由于人们对工业高度发达的负面影响预料不够,预防不利,导致了全球性的三大危机:资源短缺、环境污染、生态破坏。环境污染指自然的或人为的破坏,向环境中添加某种物质而超过环境的自净能力而产生危害的行为。由于人为因素使环境的构成或状态发生变化,环境素质下降,从而扰乱和破坏了生态系统和人类的正常生产和生活条件的现象。

    2024-04-25 阅读 (76)
  • 如何快速查看Linux系统上的Shell类型.

    如何快速查看Linux系统上的Shell类型

    一、查看当前系统中所有可登录shell的类型1、要查看当前系统中所有可登录shell的类型,在/etc/shells配置文件中记录了用户可以登录的shell的具体路径,因此查看这个文件的内容,即可知道当前系统中所支持的所有shell类型。

    2022-07-19 阅读 (60)