Java 1.6中的枚举类主体特性

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的一个特性。如何执行此操作并查看结果输出?

我有两个问题:

  1. 我的Java main方法是什么样的?请帮我执行这个部分代码。 我无法理解输出的行为方式。

  2. getLidCode()方法如何在Java 1.6中的这个类体中工作?

你称之为常量特定类主体的是JLS所指的枚举常量的可选类主体 。 它被实现为一个匿名的内部类,它扩展了外部的封闭枚举。 因此,在您的情况下,枚举常量OVERWHELMING将是一个扩展CoffeeSize的匿名内部类型,并覆盖方法getLidCode() 。 内部类看起来像伪代码,看起来像这样:

 class CoffeeSize$1 extends CoffeeSize { @Override public String getLidCode() { return "A"; } } 

在常量BIGHUGE上调用getLidCode()将调用基本枚举实现,而在OVERWHELMING上调用相同方法将调用方法的覆盖版本,因为OVERWHELMING实际上是不同类型。 要测试,只需运行代码来调用不同枚举常量的getLidCode()

 System.out.println(CoffeeSize.BIG.getLidCode()); System.out.println(CoffeeSize.HUGE.getLidCode()); System.out.println(CoffeeSize.OVERWHELMING.getLidCode()); 
 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 ------------------------------------