enum Foo
всегда неявно наследуется от Enum<Foo>
– то есть перечислением нельзя расширить другой класс, но всё еще можно реализовать интерфейсы. Из-за generic-параметра разные перечисления не имеют общего предка кроме Object
.Является
Comparable
(сравнивается позиция по порядку объявления значений) и Serializable
(сериализуется только имя константы).Имеет только заранее заданный набор значений. Значения неявно
public static final
и это нельзя переопределить. Для инициализации констант действуют все правила статической инициализации. Копии элементов перечисления не создаются даже при десериализации. Вот почему Effective Java предлагает использовать для сериализуемого синглтона
enum
. Экземпляры хранят свойства
name
и ordinal
– имя и порядковый номер константы. Статический метод values
вернет список всех констант, valueOf
– константу по имени. Спецификация.Финализация и клонирование перечислений запрещены.