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主要方法是什么样的?请帮我执行这部分代码。我无法理解输出的行为。
{1}}方法在Java 1.6中如何在此类主体中工作?
答案 0 :(得分:16)
你称之为常量特定类主体的是JLS所指的枚举常量的可选类主体。它被实现为一个匿名的内部类,扩展外部的封闭枚举。因此,在您的情况下,枚举常量OVERWHELMING
将是一个扩展CoffeeSize
的匿名内部类型,并覆盖方法getLidCode()
。在伪代码中,内部类看起来像这样:
class CoffeeSize$1 extends CoffeeSize {
@Override
public String getLidCode() {
return "A";
}
}
在常量getLidCode()
或BIG
上调用HUGE
将调用基本枚举实现,而在OVERWHELMING
上调用相同的方法将调用方法的覆盖版本,因为OVERWHELMING
实际上是另一种类型。要进行测试,只需运行代码即可调用不同枚举常量的getLidCode()
。
System.out.println(CoffeeSize.BIG.getLidCode());
System.out.println(CoffeeSize.HUGE.getLidCode());
System.out.println(CoffeeSize.OVERWHELMING.getLidCode());
答案 1 :(得分:3)
I have executed my answer,as below.Please correct me if im wrong.output is given.
干杯: - ))
public class EnumOverriddenExample {
enum CoffeeSize{
BIG(8),
HUGE(10),
OVERWHELMING(16){
public String getLidCode(){
return "A";
}
};
CoffeeSize(int ounces){
this.ounces = ounces;
}
private int ounces;
public int getOunces(){
return ounces;
}
public void setOunces(int ounces){
this.ounces=ounces;
}
public String getLidCode(){
return "B";
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("CoffeeSize for BIG is "+EnumOverriddenExample.CoffeeSize.BIG.getLidCode());
System.out.println("CoffeeSize for HUGE is "+EnumOverriddenExample.CoffeeSize.HUGE.getLidCode());
System.out.println("CoffeeSize for OVERWHELMING is "+EnumOverriddenExample.CoffeeSize.OVERWHELMING.getLidCode());
System.out.println("CoffeeSize for BIG is "+EnumOverriddenExample.CoffeeSize.BIG.getOunces());
System.out.println("CoffeeSize for HUGE is "+EnumOverriddenExample.CoffeeSize.HUGE.getOunces());
System.out.println("CoffeeSize for OVERWHELMING is "+EnumOverriddenExample.CoffeeSize.OVERWHELMING.getOunces());
}
}
Output is below
-----------------------------------
CoffeeSize for BIG is B --> returns "B"
CoffeeSize for HUGE is B -->returns "B"
CoffeeSize for OVERWHELMING is A--constant specific class body returns "A"
CoffeeSize for BIG is 8
CoffeeSize for HUGE is 10
CoffeeSize for OVERWHELMING is 16
------------------------------------