次の簡単なコードスニペットが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());
}
}
コードはenum
にname()
方法を実施することなく動作します。どうやって?
出力は以下のように非常に明白です。
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
Sunday = 7
どのようなエラーが表示されますか?あなたはそれを読みました? – SLaks
私はSLaksに同意します - 実際にコンパイルエラーメッセージを読んで、あなたに何を伝えているのかを試して理解することは非常に重要です。 –
これは、オーバーライドされたメソッド 'name()'が 'final'であり、オーバーライドできないことを示します。 – Lion