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";
}
}
Run Code Online (Sandbox Code Playgroud)
这是K&B 6书中的SCJP 1.6问题.这是常量特定类主体的一个示例,作为SCJP 6的一个特性.如何执行此操作并查看结果输出?
我有两个问题:
我的Java main方法是什么样的?请帮我执行这个部分代码.我无法理解输出的行为方式.
该getLidCode()方法在Java 1.6中如何在此类主体中工作?
Per*_*ion 16
你称之为常量特定类主体的是JLS所指的枚举常量的可选类主体.它被实现为一个匿名的内部类,扩展了外部的封闭枚举.因此,在您的情况下,枚举常量OVERWHELMING将是一个扩展的匿名内部类型CoffeeSize,并覆盖该方法getLidCode().内部类看起来像伪代码,看起来像这样:
class CoffeeSize$1 extends CoffeeSize {
@Override
public String getLidCode() {
return "A";
}
}
Run Code Online (Sandbox Code Playgroud)
调用getLidCode()常量BIG或HUGE将调用基本枚举实现,而调用相同的方法OVERWHELMING将调用方法的重写版本,因为OVERWHELMING实际上是不同的类型.要测试,只需运行代码来调用getLidCode()不同的枚举常量.
System.out.println(CoffeeSize.BIG.getLidCode());
System.out.println(CoffeeSize.HUGE.getLidCode());
System.out.println(CoffeeSize.OVERWHELMING.getLidCode());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3294 次 |
| 最近记录: |