enum CoffeeSize{
BIG(8),
HUGE(10),
OVERWHELMING(16) {
public String getLidCode(){
return "A";
}
};
private int ounces;
public int getOunces(){
return ounces;
}
CoffeeSize(int ounces){
this.ounces = ounces;
}
public String getLidCode(){
return "B";
}
}
这是 K&B 6 书中的 SCJP 1.6 问题。 这是作为 SCJP 6 的一个特性的常量特定类主体的示例。我如何执行它并查看结果输出?
我有两个问题:
我的 Java main 方法是什么样的?请帮助我执行这部分代码。我无法理解输出的行为方式。
getLidCode()
方法如何在 Java 1.6 的此类主体中工作?
最佳答案
你所说的常量特定类体就是JLS指的是枚举常量的可选类主体。它作为匿名内部类实现,扩展 外部封闭枚举。因此,在您的情况下,枚举常量 OVERWHELMING
将是扩展 CoffeeSize
并覆盖方法 getLidCode()
的匿名内部类型。在伪代码中,内部类看起来像这样:
class CoffeeSize$1 extends CoffeeSize {
@Override
public String getLidCode() {
return "A";
}
}
在常量 BIG
或 HUGE
上调用 getLidCode()
将调用基本枚举实现,而在 上调用相同的方法>OVERWHELMING
将调用该方法的覆盖版本,因为 OVERWHELMING
实际上是不同的类型。要进行测试,只需运行代码来调用不同枚举常量的 getLidCode()
。
System.out.println(CoffeeSize.BIG.getLidCode());
System.out.println(CoffeeSize.HUGE.getLidCode());
System.out.println(CoffeeSize.OVERWHELMING.getLidCode());
关于java - Java 1.6 中的枚举类主体特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15300816/