web-dev-qa-db-ja.com

列挙型は抽象メソッドを持つことができますか?

列挙型は抽象メソッドを持つことができますか?もしそうなら、何を使用し、この使用法を説明するシナリオを与えます。

40
java_geek

はい。ただし、インターフェイスを実装する列挙型 こちらをご覧ください をお勧めします。私はそれがはるかに良く見えると思います。これは抽象メソッドの例です。

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

    public abstract String makeNoise();
}
62
lukastymo

はい、abstract宣言でenumメソッドを定義できますif if onlyすべての列挙値にカスタムクラスボディがあるこれらのメソッドの実装を使用します(具体的な列挙値に実装がない場合があります)。

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

  public abstract void frobnicate();
}
18
Joachim Sauer