java枚举的父类_Java 之 枚举(Enum)

一、枚举

1、概述

枚举:JDK1.5引入的,类似于穷举,一一罗列出来

Java 枚举:把某个类型的对象,全部列出来

枚举类型的对象是有限、固定的几个常量对象。

2、应用

什么情况下会用到枚举类型?

当某个类型的对象是固定的,有限的几个,那么就可以选择使用枚举。

在整个系统的运行期间,有且只有这几个对象。

例如: 性别类:只有两个对象:男,女

季节类:有4个对象:春、夏、秋、冬

二、JDK1.5之前,实现枚举效果

1、需要把构造器私有化:

目的:在这个类的外面,无法随意的创建对象

2、在本类中,提前创建好对象,供别人使用

Demo:

1 public classTestEnum {2 public static voidmain(String[] args) {3 //Gender g1 = new Gender(); 构造器私有化,无法使用

4

5 Gender nan1 =Gender.NAN;6 Gender nan2 =Gender.NAN;7 System.out.println(nan1 == nan2);//true

8 }9 }10 classGender{11 //public:使得外面可以直接访问12 //static:使得可以使用“类名.”访问13 //final:前调这个对象是不可变

14 public static final Gender NAN = new Gender("男");15 public static final Gender NV = new Gender("女");16

17 privateString description;18

19 privateGender(String description){20 this.description =description;21 }22 }

三、JDK1.5之后使用枚举

1、定义格式

(1)声明枚举类型

【修饰符】 enum 枚举类型名{

常量对象列表

}

(2)声明枚举类型2

【修饰符】 enum 枚举类型名{

常量对象列表;

其他的成员列表

}

说明:

① 常量对象列表必须在枚举类型的首行;

② 如果常量对象列表后面还有其他的成员,那么需要在常量对象列表后面加 ;进行分割。

2、枚举

(1)枚举是一种类,是一种特殊的类,特殊在它的对象是有限的几个常量对象。

(2)枚举类型不能继承其他类型,因为枚举类型有一个隐含的父类

java.lang.Enum 是所有 Java 语言枚举类型的公共基本类。

3、常用方法

(1)构造方法

Enum 类中有一个唯一的构造器

protected Enum(String name, int ordinal)

这个构造器不是程序员手动调用的,是编译器自动调用,在所有枚举类型的构造器的首行,并且自动传入 name 和 ordinal 的值。

name:表示常量对象名称

ordinal:表示常量对象的序号,其中初始常量序数为零

(2)name() 与 ordinal() 方法

String name():返回 常量对象名称

int ordinal():返回 常量对象序数,即获取某个枚举对象的位置索引值,索引从0开始

(3)toString() 方法

String toString():在Enum类中重写了Object类的toString方法,返回常量对象名

自定义的枚举类型,eclipse不能自动生成 toSring 方法,但是可以手动重写。因为IDE认为,父类的 toString方法已经很完美了。

(4)values() 与 valueof() 方法

枚举类型[] values():返回该枚举的所有枚举对象

枚举类型 valueOf(String name):根据name常量对象名返回枚举对象

(5)compareTo() 方法

枚举对象.compareTo() 该方法用于比较两个枚举对象在定义时的顺序

返回正值:代表方法中参数在调用该方法的枚举对象位置之前

返回零:代表两个互相比较的枚举成员的位置相同

返回负值:代表方法中参数在调用该方法的枚举对象位置之后

Demo:

1 public classTestEnum {2 public static voidmain(String[] args) {3 Season s =Season.SPRING;4 System.out.println(s);//自动调用toString

5

6 System.out.println(s.name());7 System.out.println(s.ordinal());8 System.out.println("-----------------");9

10 Season[] all = Season.values(); //获取所有枚举对象

11 for (int i = 0; i < all.length; i++) {12 System.out.println(all[i]);13 }14

15 System.out.println("-----------------");16 Season spring = Season.valueOf("SPRING");17 System.out.println(spring);18 }19 }20 enumSeason{21 //常量对象后面没有(值)就是调用无参构造22 //常量对象后面有(值)就是调用有参构造

23 SPRING("春暖花开"),SUMMER,FALL,WINTER;24

25 privateString description;26

27 privateSeason() {28

29 }30

31 privateSeason(String description) {32 this.description =description;33 }34 //手动重写 toString() 方法

35 publicString toString(){36 return name() + ":" +description;37 }38

39 }

四、枚举类型的特点

1、枚举类型有一个公共的基本的父类,是 java.lang.Enum 类型,所以不能再继承别的类型

2、枚举类型的构造器必须是私有的

3、枚举类型可以实现接口

枚举实现接口要重写所有的抽象方法,所有对象可以都调用通用的重写方法,也可以调用各自重写的方法。

Demo:

1 public classTestEnum {2 public static voidmain(String[] args) {3 MyEnum a =MyEnum.A;4 a.test();5

6 MyEnum b =MyEnum.B;7 b.test();8 }9 }10 interfaceMyInter{11 voidtest();12 }13 enum MyEnum implementsMyInter{ //每个对象各自重写方法14 A{15 @Override16 public voidtest() {17 System.out.println("aaa");18 }19 },B{20 @Override21 public voidtest() {22 System.out.println("bbb");23 }24 }25 }26 enum MyEnum1 implementsMyInter{ //通用的方法27 A,B;28

29 @Override30 public voidtest() {31 System.out.println("test");32 }33 }

五、父类 java.lang.Enum 类型

1、构造器

protected Enum(String name, int ordinal):由编译器自动调用

2、String name(): 常量对象名

3、int ordinal(): 返回常量对象的序号,第一个序号是0

4、String toString(): 返回常量对象名,如果子类想重写,需要手动重写

5、int compareTo(Object obj): 按照常量对象的顺序比较

六、枚举类型的优势

类型安全

紧凑有效的数据定义

可以和程序其他部分完美交互

运行效率高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值