繁体   English   中英

单例+抽象类问题

[英]Singleton + Abstract class issue

我正在尝试定义此继承:

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只能设置可见性修饰符,可以是public或protected

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

谢谢你的时间!

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

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

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

简短的答案是,您不能覆盖静态方法,因为它们已绑定到超类。

长答案是,这会使实现单例继承变得复杂(假设您想将实例保存在超类中)。 查看Java中的单例和继承

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM