Перечисления в java.
Изучаю java. Дошёл до перечислений, и тут просто вынос мозга творится. Если я что-то неправильно напишу (а далее я пишу так, как сам всё понял), то исправьте и объясните, пожалуйста.
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE; }
В этой строке компилятор создал 4 экземпляра класса Size, которые содержат имена констант перечисления и их порядковые номера с помощью некоторого конструктора класса Size, который наследуется от этого конструктора суперкласса:
protected Enum(String name, int ordinal);
Создавать где-нибудь ещё экземпляра класса Size я не могу, т.к. нет конструктора с подходящим ключом доступа. Допустим, тут ещё всё более-менее ясно. Я пошёл дальше:
package main;
enum Size
{
SMALL(10), MEDIUM(20), LARGE(30), EXTRA_LARGE(40);
private int size;
Size(int size)
{
//super("Name", 1);
this.size = size;
}
int getSize() { return size; }
}
public class Main
{
public static void main(String... args)
{
Size size = Size.SMALL;
//Size size1 = new Size(3);
}
}
Тогда непонятно: Почему компилятор не пропускает super("Name", 1) в конструкторе класса Size. Ведь вызываемый мной конструктор в суперклассе Enum объявлен как protected. Кроме того, он не является конструктором по умолчанию и он единственный в суперклассе Enum. Т.е. я ОБЯЗАН его вызвать явным образом!!!
И ещё не понятно:
Компилятор не пропускает Size size1 = new Size(3) , хотя я нахожусь в том же пакете!