Почему разные файлы классов создаются для каждого типа перечисления, если у них есть метод, специфичный для констант?

у меня есть одно перечисление как

enum OperationsType {
  ADD("+"), SUB("-"), DIV("/"), MUL("*");

  private String opcodes;

  private OperationsType(String opcodes) {
    this.opcodes = opcodes;
  }

  public String toString() {
    return this.opcodes;
  }
}

Здесь все типы enum не имеютconstant Specific method такjavac создает только один файл класса дляenum как

OperationsType.class

но если я добавлюconstant Specific method в том же коде для всех типов перечисления тогдаjavac создает 5 файлов классов.

Operations.class
Operations$1.class
Operations$2.class
Operations$3.class
Operations$4.class

для кода ниже

enum Operations {
ADD("+") {
    public double apply(double a, double b) {
        return a + b;
    }
},
SUB("-") {
    public double apply(double a, double b) {
        return a - b;
    }
},
DIV("/") {
    public double apply(double a, double b) {
        return a / b;
    }
},
MUL("*") {
    public double apply(double a, double b) {
        return a * b;
    }
};

private String opcodes;

private Operations(String opcodes) {
    this.opcodes = opcodes;
}

public abstract double apply(double a, double b);
}

Так что я сомневаюсь, почемуcompiler создал 4 разных класса для каждогоenum type если они имеютconstant Specific method но не создавать разные классы, если они не имеютconstant Specific method?

Ответы на вопрос(2)

Ваш ответ на вопрос