java enum混乱

tra*_*ank 6 java enums interface

我遇到了以下java代码.这里接口包含两个方法,其中只有一个方法在枚举中实现.它是name()自动实现的.我的问题是它怎么可能?我之前没有读过关于枚举中自动方法实现的任何规则.那么这里发生了什么?此外,代码没有给出任何类型的编译时错误.

interface Named {
    public String name();
    public int order();
}

enum Planets implements Named {
    Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune;
    // name() is implemented automagically.
    public int order() { return ordinal()+1; }
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*a R 9

name()在Enum类中定义,它满足您的接口契约,因此您不必定义,name()除非您想要覆盖默认行为.


Dav*_*ton 6

enum有一个默认方法name(),就是全部.

它和别人一样values(),valueOf()ordinal(),来自Enum类.