2️⃣ 使用 enum 关键字后,就 不能再继承其他类 了,因为隐式继承了 Enum类,而 Java是单继承机制! 但是,枚举类和普通类一样,可以实现接口,如下形式:
enum 类名 implents 接口1,接口2… …{ }
🍌 示例代码:
public class Main { public static void main(String[] args) { Animal.Bird.speak(); } } /** * 接口 */ interface Say{ void speak(); } /** * Animal类 */ enum Animal implements Say{ Bird; @Override public void speak() { System.out.println("动物叫~~~"); } }
运行结果:
动物叫~~~
3️⃣ 使用 enum 关键字后,类似上面所讲的自定义枚举类,即构造方法被私有化,同样无法创建对象。
4 enum常用方法及基本使用
🚗 enum常用方法一览表:
方法名 | 详细描述 |
valueOf() | 传递枚举类型的Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量 |
toString() | 得到当前枚举常量的名称。你可以通过重写该方法使得到的结果更易读 |
equals() | 在枚举类型中可以直接使用 == 来比较两个枚举常量是否相等。Enum提供的该方法也是直接使用 == 来判断的。它的存在是为了在 Set 、 List 和 Map 中使用。equals() 是不可变的 |
hashCode() | 与equals()保持一致,也是不可变的 |
getDeclaringClass() | 得到枚举常量所属的枚举类型的Class对象。用于判断两个枚举常量是否属于同一枚举类型 |
name() | 得到当前枚举常量的名称 |
ordinal() | 得到当前枚举常量的次序,与数组索引类似,从0开始 |
comparaTo() | 可以比较两个枚举常量的大小(按照声明的顺序排列) |
clone() | 枚举类型不能被Clone。为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException异常的不变Clone()方法 |
4.1 toString() 与 name()
toString() 方法 Enum类已经重写过了,返回当前对象名;
name() 方法返回当前对象名,子类不能重写;
🐦 示例代码及结果:
4.2 oridinal()
返回当前对象的序号,和声明顺序有关,索引默认从0开始。
🐦 示例代码及结果:
4.3 values() 与 valueOf()
values() 返回当前枚举类的所有常量(以枚举类数组的形式);
valueOf() 将字符串转成枚举对象,要求字符串必须为已有常量名,否则抛出异常。
🐦 示例代码及结果:
public class Main { public static void main(String[] args) { System.out.println("============== values ================="); Animal[] animals = Animal.values(); // 接收常量 for (Animal animal: animals) { System.out.print(animal + " "); // 默认调用toString输出对象名 } System.out.println("\n============== valueOf ================="); Animal rabbit = Animal.valueOf("RABBIT"); // 在枚举类寻找对象名为RABBIT的对象,引用赋给mouse System.out.println(rabbit); // RABBIT } } /** * Animal类 */ enum Animal { // 在enum创建对象,并对外暴露 RAT("子鼠"), OX("丑牛"), TIGER("寅虎"), RABBIT("卯兔"), DRAGON("辰龙"), SNAKE("巳蛇"), HORSE("午马"), SHEEP("未羊"), MONKEY("申猴"), ROOSTER("酉鸡"), DOG("戌狗"), PIG("亥猪"); private String name; // 十二生肖姓名 // 构造器私有化 private Animal(String name) { this.name = name; } }
============== values =================
RAT OX TIGER RABBIT DRAGON SNAKE HORSE SHEEP MONKEY ROOSTER DOG PIG
============== valueOf =================
RABBIT
5 练习*
声明 Week枚举类,其中包含星期一到星期日的定义。请你完成枚举类的编写,并在测试类遍历输出信息,形式如下图:
public class Test { public static void main(String[] args) { Week[] days = Week.values(); for (Week day : days) { System.out.println(day); } } } enum Week{ MONDAY("星期一"),TUESDAY("星期二"), WEDNESDAY("星期三"),THURSDAY("星期四"), FRIDAY("星期五"),SATURDAY("星期六"), SUNDAY("星期日"); private String desc; private Week(String desc){ this.desc = desc; } @Override public String toString() { return this.desc; } }