6.9.4 实现接口的枚举类
枚举类也可以实现一个或多个接口。与普通类实现一个或多个接口完全一样,枚举类实现一个或多个接口时,也需要实现该接口中的所有抽象方法。
1. 在枚举类中实现接口
枚举类实现接口与普通类实现接口完全一样:使用implements实现接口,并实现接口里包含的抽象方法即可。
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式(因为方法体完全一样)。
2. 在枚举值中实现接口
如果需要每个枚举值在调用接口方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该接口方法,,从而让不同的枚举值调用该方法时具有不同的行为方式。
枚举值后面的花括号部分实际上是匿名内部类的类体部分。在这种情况下,当创建枚举值时,并不是直接创建枚举类的实例,而是相当于创建枚举类的匿名子类的实例。
实例
目录结构
| 12
 3
 4
 
 | G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.9\interface├─Gender.java
 ├─GenderDesc.java
 └─Test.java
 
 | 
接口
| 12
 3
 4
 
 | public interface GenderDesc{
 void info();
 }
 
 | 
实现接口的枚举类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | public enum Gender implements GenderDesc {
 MALE("男")
 
 {
 
 public void info() {
 System.out.println("这个枚举值代表男性");
 }
 },
 FEMALE("女")
 
 {
 
 public void info() {
 System.out.println("这个枚举值代表女性");
 }
 },
 
 No_MALE_OR_Female("不男不女");
 
 
 private final String name;
 
 
 private Gender(String name) {
 this.name = name;
 }
 
 public String getName() {
 return this.name;
 }
 
 
 public void info() {
 System.out.println("这是一个用于用于定义性别的枚举类");
 }
 }
 
 
 | 
测试类:通过枚举实例调用接口方法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | public class Test {public static void main(String[] args) {
 
 Gender male = Gender.valueOf("MALE");
 Gender female = Gender.valueOf("FEMALE");
 Gender no_male_or_female = Gender.valueOf("No_MALE_OR_Female");
 
 male.info();
 female.info();
 
 no_male_or_female.info();
 }
 }
 
 | 
运行效果:
| 12
 3
 
 | 这个枚举值代表男性这个枚举值代表女性
 这是一个用于用于定义性别的枚举类
 
 |