Static члены не наследуются, верно. Так как это бессмысленно.
Просто я думал, зачем же нужен в enum valueOf(). Разобрался. Предположил, что метод хранит в себе строковое представление констант, а затем сравнивает вводные данные с ними.
Метод valueOf() ничего не хранит и компилятор подставляет одинаковую реализацию valueOf() во всех enum'ах:
public enum Hello {
FIZZ, BUZZ;
// Данный метод автоматически генерируется компилятором.
// Для любого enum'а.
public static Hello valueOf(String name) {
return Enum.valueOf(Hello.class, name);
}
}
А внутри
Enum.valueOf обычный
HashMap<String, Hello>, где ключом является имя константы, а значением соответствующий инстанс класса Hello. Не могу согласиться, что этот вариант плох с точки зрения оптимизации.
Но так как я знаю, что константы в enum это анонимные классы
Это не так. Константы - это конкретные инстансы вашего enum класса, а не инстансы анонимных наследников от него.
Получается мне действительно прийдется перекрывать эти переменные повторным объявлением для разрыва связи с предком?
Не очень понял суть вопроса. Чтобы разорвать связь с предком нужно просто удалить наследование от него.