多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
<!-- Implements, not Inherits --> ## 实现而非继承 我们已经知道,所有的 enum 都继承自 Java.lang.Enum 类。由于 Java 不支持多重继承,所以你的 enum 不能再继承其他类: ```java enum NotPossible extends Pet { ... // Won't work ``` 然而,在我们创建一个新的 enum 时,可以同时实现一个或多个接口: ```java // enums/cartoons/EnumImplementation.java // An enum can implement an interface // {java enums.cartoons.EnumImplementation} package enums.cartoons; import java.util.*; import java.util.function.*; enum CartoonCharacter implements Supplier<CartoonCharacter> { SLAPPY, SPANKY, PUNCHY, SILLY, BOUNCY, NUTTY, BOB; private Random rand = new Random(47); @Override public CartoonCharacter get() { return values()[rand.nextInt(values().length)]; } } public class EnumImplementation { public static <T> void printNext(Supplier<T> rg) { System.out.print(rg.get() + ", "); } public static void main(String[] args) { // Choose any instance: CartoonCharacter cc = CartoonCharacter.BOB; for(int i = 0; i < 10; i++) printNext(cc); } } ``` 输出为: ``` BOB, PUNCHY, BOB, SPANKY, NUTTY, PUNCHY, SLAPPY, NUTTY, NUTTY, SLAPPY, ``` 这个结果有点奇怪,不过你必须要有一个 enum 实例才能调用其上的方法。现在,在任何接受 Supplier 参数的方法中,例如 printNext(),都可以使用 CartoonCharacter。