java enum混乱

时间:2011-12-07 20:08:01

标签: java interface enums

我遇到了以下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; }
}

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

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

它和others like values(), valueOf(), and ordinal(), come from the Enum class

答案 2 :(得分:2)

Java中的所有枚举都隐式扩展Enum,它实现了name()方法。

  

public final String name()

     

返回此枚举常量的名称,与其枚举声明中声明的完全相同。

答案 3 :(得分:1)

在Java中,有一些为类型预定义的属性和方法。对于枚举,方法name()和对于数组,属性length是示例。在您的示例中,方法名称()将返回“Mercury”,“Venus”,“Earth”等。

答案 4 :(得分:1)

每个enum都来自抽象类Enum<E....>。该类实现了name()和提到的ordinal()等等。看一看。