Enum в Java не позволяет реализовать метод в его интерфейсе реализации. - PullRequest
1 голос
/ 23 декабря 2011

В следующем фрагменте простого кода используется интерфейс Named, содержащий два метода, а именно name() и order(), который реализуется enum с именем Days.enum Days не позволяет реализовать метод name() своего реализующего интерфейса.Это вызывает ошибку во время компиляции и, хотя enum не реализует метод name(), он не выдает никакой ошибки.

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());
    }
}

Код работает без реализацииметод name() в enum.Как?


Вывод вполне очевиден, как показано ниже.

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

Ответы [ 2 ]

8 голосов
/ 23 декабря 2011

Базовый класс Enum уже имеет метод name() .
Так как этот метод final, вы не можете переопределить его (как четко указано в сообщении об ошибке).

3 голосов
/ 23 декабря 2011

В Java API имя () определяется как:

public final String name()

Таким образом, name () существует для всех перечислений и не может быть переопределено.

См. Также: Java API для enum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...