枚举可以有抽象方法吗?

2022-08-31 17:12:10

枚举可以有抽象方法吗?如果是这样,有什么用,并给出一个场景来说明这种用法。


答案 1

是的,但您可能更喜欢实现接口的枚举,请看这里。我认为它看起来好多了。这是抽象方法的示例:

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

    public abstract String makeNoise();
}

答案 2

是的,当且仅当所有枚举值都具有具有这些方法实现的自定义类体时,才能在声明中定义方法(即,没有具体的枚举值可能缺少实现)。abstractenum

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

  public abstract void frobnicate();
}