前言
在上一篇文章中,我解释了如何以及为什么在Java代码中使用enums
而不是switch/case
控制结构。 在这里,我将展示如何扩展现有enums
功能。
介绍
Java enum
是一种编译器魔术。 在字节码中,任何enum
都表示为扩展抽象类java.lang.Enum
并具有几个静态成员的类。 因此,枚举不能扩展任何其他类或枚举:没有多重继承。
类也不能扩展枚举。 此限制由编译器强制执行。
这是一个简单的enum
:
enum Color {red, green, blue}
此类尝试扩展它:
SubColor class extends Color {}
这是尝试编译类SubColor的结果:
$ javac SubColor.java SubColor.java: 1 : error: cannot inherit from final Color SubColor class extends Color {}
^ SubColor.java: 1 : error: enum types are not extensible SubColor class extends Color {} ^ 2 errors
Enum
既不能扩展也不能扩展。 那么,如何扩展其功能呢? 关键字是“功能”。 Enum
可以实现方法。 例如,枚举Color
可以声明抽象方法draw()
,每个成员都可以重写它:
enum Colo