Я смотрел the source code of the Enum
class. Это похоже на простой абстрактный класс с защищенным конструктором. Это не окончательно, у него нет специальных аннотаций внутри него, и он не использует собственный код. И все же он не может быть подклассифицирован напрямую. На самом деле, следующий код не компилируется:Что делает класс Enum неприемлемым?
class Foo<E extends Enum<E>> extends Enum<E> {
Foo(String name, int ordinal) {
super(name, ordinal);
}
}
Я знаю, что Enum
специальный класс в Java, и я понимаю, что есть веские причины, почему прямые подклассы должны быть запрещены. Но технически, как вы применяете это поведение? Может ли программист создать аналогичный не конечный класс, который не допускал бы прямого подкласса, несмотря на наличие доступного конструктора?