我正在尝试定义此继承:

public abstract class GameAction extends Observable {
  protected static GameAction instance = null;

  protected GameAction() {
    // Exists only to defeat instantiation.
  }

  //All GameActions are singletons
  public static abstract GameAction getInstance();
}

public class ChooseAnswerAction extends GameAction {

  protected ChooseAnswerAction() {
    // Exists only to defeat instantiation.
  }

  //All GameActions are singletons
  @Override
  public static GameAction getInstance() {
    if(instance == null) {
      instance = new ChooseAnswerAction();
    }
    return instance;
  }
}


问题是第二类中的getInstance()方法在父亲身上找不到相同的方法,因此它要求我删除@Override

同样在父类上,我得到以下错误:


  GameAction类型的抽象方法getInstance只能设置公开或受保护的可见性修饰符


我可以解决此错误的唯一方法是取出static修饰符,但我需要它...

谢谢你的时间!

最佳答案

这是我去单身人士的链接。由于AlekseyShipilёv发表了非常详细的帖子-我在这里链接您。

http://shipilev.net/blog/2014/safe-public-construction/

对于您的情况,由于您要返回子单例实例,所以我建议将该实例对象放在子类中。另外,您可能需要更好的设计,并考虑使用Singleton工厂。

09-07 00:07