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

Bu, K & B 6 kitabından bir SCJP 1.6 sorusudur. Bu, SCJP 6'nın bir özelliği olarak Sabit Spesifik Sınıf Gövdenin bir örneğidir. Bunu nasıl uygularım ve sonuç çıktısını nasıl görebilirim? Java sınıfındaki enum sınıfı gövde özelliği

ben 2 soru var:?

  1. Ya Java ana yöntem gibi görünüyor bana bu kısmi kod çalıştırmasına yardımcı olun. Çıkışın nasıl davrandığını anlayamıyorum.

  2. getLidCode() yöntemi, Java 1.6'daki bu sınıf gövdesinde nasıl çalışır?

+0

neyi "Çalıştır"? Bu bir enum. 'CoffeeSize.BIG.getOunces()' –

+0

Nerede yanlış downvoter biliyorum. – Deepak

+0

2. getLidCode() yöntemi, Java 1.6'daki bu Sabit Spesifik Sınıf Gövde'de nasıl çalışır, bu enum kodunun nasıl çalıştığını bilmemeyi kabul ediyorum bu yüzden bu soruyu yayınladım – Deepak

cevap

11

bunu Sabit Özgül Sınıf Vücut JLS sabit bir enum gelince için isteğe bağlı sınıf vücudu atıfta şeydir ne denir. 'un dış, kapalı enum'u genişleten anonim bir iç sınıf olarak uygulanır. Bu durumda, enum sabiti OVERWHELMING, CoffeeSize'u genişleten ve getLidCode() yöntemini geçersiz kılan anonim bir iç tipte olacaktır. OVERWHELMING aynı yöntemi çağrılırken ait overriden versiyonunu çağıracağı ise

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

ya sabit BIG veya HUGE çağıracağı baz çeteleler uygulanmasına ilişkin getLidCode() çağrılması: İç sınıf şuna benzer, pseudocode görünüyor yöntem, OVERWHELMING aslında farklı bir türüdür. Test etmek için, farklı enum sabitlerinin getLidCode()'unu çağırmak için kodu çalıştırın.

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

mükemmel açıklama SUPERB.Teşekkürler Çok Algı, size çok müteşekkirim. – Deepak

+1

Sorun değil, yardım etmekten memnunum. – Perception

+0

neden diğerleri benim soru downvoted yok.i sadece bir açıklama gerekli :(, hepimiz birbirimize yardım etmek için buradayız.Lütfen bilgi paylaşın.Teşekkür ederiz Tekrar Algılama – Deepak

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

Şerefe :-))

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