2013-03-08 14 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"; 
    } 
} 

To jest pytanie SCJP 1.6 z K & B 6 książka. To jest przykład Stałego Ciała szczególnej klasy jako cecha SCJP 6. Jak to zrobić i zobaczyć wynikowy wynik?Funkcja enum klasy ciała w Javie 1.6

mam 2 pytania:

  1. Co moim głównym metoda Java wyglądają jak proszę mi pomóc, aby wykonać tę częściową kod. Nie jestem w stanie zrozumieć, jak zachowuje się wyjście.

  2. Jak działa metoda getLidCode() w treści tej klasy w Java 1.6?

+0

"EXECUTE", co? To enum. 'CoffeeSize.BIG.getOunces()' –

+0

Czy mogę wiedzieć, gdzie jestem źle downvoter. – Deepak

+0

2.Jeśli metoda getLidCode() działa w tym stałym korpusie klasy specjalnej w języku Java 1.6, akceptuję, nie wiem jak powinien działać ten kod wyliczeniowy, dlatego wysłałem to pytanie. – Deepak

Odpowiedz

11

co nazywasz stałej określonej klasy ciała jest co JLS nazywa opcjonalnego ciało klasy dla wyliczenia stałej. Jest zaimplementowana jako anonimowa klasa wewnętrzna, która rozciąga się na zewnętrzne, zamykające się wyliczenie. Tak więc w twoim przypadku stała enum OVERWHELMING będzie anonimowego typu wewnętrznego, który rozciąga się na CoffeeSize i przesłania metodę getLidCode(). Wewnętrzna klasa wygląda w Pseudokod, wygląda mniej więcej tak:

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

Wywołanie getLidCode() albo na stałym BIG lub HUGE wywoła realizacji wyliczenia bazowych, podczas wywoływania tej samej metody na OVERWHELMING wywoła nadpisane wersję metoda, ponieważ OVERWHELMING jest w rzeczywistości innego rodzaju. Aby przetestować, po prostu uruchom kod, aby wywołać getLidCode() różnych stałych enum.

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

doskonałe wyjaśnienie SUPERB. Dzięki tak wiele Percepcji, jestem im bardzo wdzięczny. – Deepak

+1

Bez problemu, miło mi pomóc. – Perception

+0

Nie rozumiem, dlaczego inni mnie popierali. Potrzebowałem tylko wyjaśnienia :(, wszyscy jesteśmy tutaj, aby sobie nawzajem pomóc.Prosimy o dzielenie się wiedzą.Po raz kolejny Perception – Deepak

1
I have executed my answer,as below.Please correct me if im wrong.output is given. 

Pozdrawiam :-))

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 
------------------------------------