2011-12-23 15 views
1

次の簡単なコードスニペットがDays命名すなわちname()order()enumによって実現されている2つのメソッドを含むインタフェースNamedを使用する方法を実装することはできません。 enum Daysは、実装インターフェイスのメソッドを実装することを許可していません。コンパイル時にエラーが発生し、name()メソッドはenumによって実装されていませんが、エラーは発生しません。列挙は、その実装インタフェース

package enumpkg; 

interface Named 
{ 
    public String name(); 
    public int order(); 
} 

enum Days implements Named 
{ 
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday; 

    public int order() 
    { 
     return ordinal()+1; 
    } 
} 

final public class Main 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Monday = "+Days.Monday.order()); 
     System.out.println("Tuesday = "+Days.Tuesday.order()); 
     System.out.println("Wednesday = "+Days.Wednesday.order()); 
     System.out.println("Thursday = "+Days.Thursday.order()); 
     System.out.println("Friday = "+Days.Friday.order()); 
     System.out.println("Saturday = "+Days.Saturday.order()); 
     System.out.println("Sunday = "+Days.Sunday.order()); 
    } 
} 

コードはenumname()方法を実施することなく動作します。どうやって?


出力は以下のように非常に明白です。

Monday = 1 
Tuesday = 2 
Wednesday = 3 
Thursday = 4 
Friday = 5 
Saturday = 6 
Sunday = 7 
+3

どのようなエラーが表示されますか?あなたはそれを読みました? – SLaks

+1

私はSLaksに同意します - 実際にコンパイルエラーメッセージを読んで、あなたに何を伝えているのかを試して理解することは非常に重要です。 –

+0

これは、オーバーライドされたメソッド 'name()'が 'final'であり、オーバーライドできないことを示します。 – Lion

答えて

8

ベースname() methodがすでにあります。
このメソッドはfinalなので、オーバーライドすることはできません(エラーメッセージが明確に示すように)。 Java API、名前(から

3

)は次のように定義されます

public final String name()

このように(名前)すべての列挙型のために存在し、オーバーライドではありません。

も参照してください。Java API for enum

関連する問題