Может ли перечисление иметь абстрактные методы? - PullRequest
40 голосов
/ 14 сентября 2011

Может ли перечисление иметь абстрактные методы?Если да, то в чем польза, и приведите сценарий, который проиллюстрирует это использование.

Ответы [ 2 ]

61 голосов
/ 14 сентября 2011

Да, но вы можете предпочесть enum, который реализует интерфейс, Смотрите здесь .Я думаю, это выглядит намного лучше.Это пример абстрактного метода:

public enum Animal {
    CAT {
        public String makeNoise() { return "MEOW!"; }
    },
    DOG {
        public String makeNoise() { return "WOOF!"; }
    };

    public abstract String makeNoise();
}
18 голосов
/ 14 сентября 2011

Да, вы можете определить abstract методы в объявлении enum тогда и только тогда, когда все значения перечисления имеют тела пользовательских классов с реализациями этих методов (т.е. ни одно конкретное значение перечисления может не иметь реализация).

public enum Foo {
  BAR {
    public void frobnicate() {
      // do BAR stuff
    }
  },
  BAZ {
    public void frobnicate() {
      // do BAZ stuff
    }
  };

  public abstract void frobnicate();
}
...