我遇到了以下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; }
}
答案 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()
等等。看一看。