2013-03-08 3 views
5
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"; 
    } 
} 

Это вопрос SCJP 1.6 от K & B 6 книга. Это пример Constant Specific Class Body как функция SCJP 6. Как это выполнить и посмотреть результат в результате?Функция класса класса Enum в Java 1.6

У меня 2 вопроса:

  1. Что мой основной метод Java выглядят как Пожалуйста, помогите мне выполнить этот частичный код. Я не могу понять, как работает вывод.

  2. Как работает метод getLidCode() в этом классе тела в Java 1.6?

+0

"Execute" что? Это перечисление. 'CoffeeSize.BIG.getOunces()' –

+0

Могу ли я узнать, где я ошибаюсь downvoter. – Deepak

+0

2. Как работает метод getLidCode() в этом классе Constant Specific Class в Java 1.6, я принимаю, что я не знаю, как этот код перечисления должен работать, поэтому я разместил этот вопрос – Deepak

ответ

11

Что вы называете Constant Конкретная Класс тела является то, что JLS относится к как дополнительный корпус класса для перечисления постоянной. Он реализован как анонимный внутренний класс, который расширяет внешний, охватывающий перечисление. Таким образом, в вашем случае константа перечисления OVERWHELMING будет иметь анонимный внутренний тип, который расширяет CoffeeSize и переопределяет метод getLidCode(). Внутренний класс выглядит, в псевдокоде, выглядит примерно так:

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

Calling getLidCode() либо на постоянной BIG или HUGE будет ссылаться на реализацию базовых Перечисления, в то время как применение того же метода на OVERWHELMING будет вызывать перекрываться версию из метод, так как OVERWHELMING фактически имеет другой тип. Чтобы проверить, просто запустите код, чтобы вызвать getLidCode() различных констант перечисления.

System.out.println(CoffeeSize.BIG.getLidCode()); 
System.out.println(CoffeeSize.HUGE.getLidCode()); 
System.out.println(CoffeeSize.OVERWHELMING.getLidCode()); 
+0

отличное объяснение SUPERB.Thanks so much Perception, im очень благодарен вам. – Deepak

+1

Без проблем, рад помочь. – Perception

+0

i dont why others downvoted my question.i просто нужно объяснение :(, мы все здесь, чтобы помогать друг другу. Пожалуйста, поделитесь знаниями. Еще раз спасибо. Восприятие – Deepak

1
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 
------------------------------------ 
Смежные вопросы