Take a look at this blogpage, it describes how Java enums are compiled into bytecode. You'll see that there's a small addition compared to your second code sample, which is an array of Direction objects called VALUES. This array holds all possible values for your enum, so you won't be able to do
new Direction(2, 2)
(for example using reflection) and then use that as a valid Direction value.
Plus, as @Eng.Fouad correctly explains, you don't have values(), valueOf() and ordinal().