Каковы различия между перечислением Java и классом с закрытым конструктором? [Дубликат]

На этот вопрос уже есть ответ здесь:

В чем преимущество перечисления Java по сравнению с классом с открытыми статическими полями final? 14 ответов

Я пытался понять, как на самом деле работает перечисление Java, и пришел к выводу, что он очень похож на обычный класс Java, конструктор которого объявлен как частный.

Я только что пришел к такому выводу, и это не основано на раздумьях, но я хотел бы знать, что я что-то пропускаю.

Ниже приведена реализация простого перечисления Java и эквивалентного класса Java.

public enum Direction {
    ENUM_UP(0, -1),
    ENUM_DOWN(0, 1),
    ENUM_RIGHT(1, 0),
    ENUM_LEFT(-1, 0);


    private int x;
    private int y;

    private Direction(int x, int y){
        this.x = x;
        this.y = y;
    }
    public int getEnumX(){
        return x;
    }
    public int getEnumY(){
        return y;
    }
}

Какая разница в значении между кодом выше и ниже?

public class Direction{
    public static final Direction UP = new Direction(0, -1) ;
    public static final Direction DOWN = new Direction(0, 1) ;
    public static final Direction LEFT = new Direction(-1, 0) ;
    public static final Direction RIGHT = new Direction(1, 0) ;


    private int x ;
    private int y ;

    private Direction(int x, int y){
        this.x = x ;
        this.y = y ;
    }
    public int getX(){
        return x;
    }
    public int getY(){
        return y;
    }
}

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

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