2017-03-04 13 views
1

私はもっと多くのJAVAを使うことにしました。OCA 7では、別のメソッドをオーバーライドするメソッドを宣言できます。この列挙型を参照してください:Java enumメソッドは次のメソッドをオーバーライドするのはいつですか?

enum CoffeeSize { 
    BIG(), 
    HUGE(), 
    OVERWHELMING() { 
     public String getLidCode() { // This method overrides the following method with similar name. 
      return 'A'; 
     } 
    }; // <--- is this semicolon I should be looking for? 

    CoffeeSize(ounces) { 
     this.ounces = ounces; 
    } 

    private int ounces; 

    public int getOunces() { 
     return ounces; 
    } 

    public String getLidCode() { 
     return 'B'; 
    } 
} 

私の質問は、enumのメソッドは別のメソッドをオーバーライドしますか?上書きするセミコロンの前にあるメソッドか、ここでのルールは何ですか?

お時間をいただきありがとうございます。

+1

いいえ年齢のコンストラクタなしではコンパイルされません – Bohemian

+0

ドキュメントを読むことを検討http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.9列挙型はクラスであり、どのようなクラスでもほぼ同じ方法でメソッドをオーバーライドすることができます。相違点は、オーバーライドされたメソッドがメインのenum本体または 'Object'でのみ宣言され、enumの各定数すべてでオーバーライドされる点です。 –

答えて

3

定数は、列挙型自体は抽象基底クラスである匿名クラスに類似行為:

abstract class CoffeeSize { 
    CoffeeSize(int ounces) { 
     this.ounces = ounces; 
    } 

    private int ounces; 

    public int getOunces() { 
     return ounces; 
    } 

    public String getLidCode() { 
     return "B"; 
    } 
} 

CoffeeSize OVERWHELMING = new CoffeeSize(3) { 
    @Override 
    public String getLidCode() { 
     return "A"; 
    } 
}; 

あなたはセミコロンの前に任意の定数だけでなく、1と基本実装をオーバーライドすることができます。

enum CoffeeSize { 
    BIG(1){ 
     @Override 
     public String getLidCode() { 
      return "C"; 
     } 
    }, 
    HUGE(2) { 
     @Override 
     public String getLidCode() { 
      return "B"; 
     } 
    }, 
    OVERWHELMING(3) { 
     @Override 
     public String getLidCode() { 
      return "A"; 
     } 
    }; 
    ... 
} 

上記のすべての定数は、異なる実装でgetLidCodeをオーバーライドします。セミコロンは定数リストの終わりを示します。

関連する問題