Java 1.6中的枚举类主体功能

Dee*_*pak 7 java enums

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

我有两个问题:

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

  2. 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()常量BIGHUGE将调用基本枚举实现,而调用相同的方法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)