6.9.4 实现接口的枚举类
枚举类也可以实现一个或多个接口。与普通类实现一个或多个接口完全一样,枚举类实现一个或多个接口时,也需要实现该接口中的所有抽象方法。
1. 在枚举类中实现接口
枚举类实现接口与普通类实现接口完全一样:使用implements
实现接口,并实现接口里包含的抽象方法即可。
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式
(因为方法体完全一样)。
2. 在枚举值中实现接口
如果需要每个枚举值在调用接口方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该接口方法,,从而让不同的枚举值调用该方法时具有不同的行为方式。
枚举值后面的花括号部分
实际上是匿名内部类的类体部分。在这种情况下,当创建枚举值时,并不是直接创建枚举类的实例,而是相当于创建枚举类的匿名子类的实例。
实例
目录结构
1 2 3 4
| G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.9\interface ├─Gender.java ├─GenderDesc.java └─Test.java
|
接口
1 2 3 4
| public interface GenderDesc { void info(); }
|
实现接口的枚举类
1 2 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("这是一个用于用于定义性别的枚举类"); } }
|
测试类:通过枚举实例调用接口方法
1 2 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(); } }
|
运行效果:
1 2 3
| 这个枚举值代表男性 这个枚举值代表女性 这是一个用于用于定义性别的枚举类
|