我正在尝试定义此继承:
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只能设置一个可见性修饰符,一个是公共的或受保护的
我能解决这个错误的唯一方法是取出静态修饰符,但我需要它......
感谢你的时间!
答案 0 :(得分:2)
以下是关于单身人士的链接。自从AlekseyShipilёv发表了非常详细的帖子 - 我将你链接到那里。
http://shipilev.net/blog/2014/safe-public-construction/
在您的情况下,由于您要返回子单例实例,我建议实例对象在子类中。此外,您可能需要更好的设计并考虑使用单件工厂。
答案 1 :(得分:0)
简短的回答是,你不能覆盖静态方法,因为它们绑定到超类。
答案很长,这使得实现单例继承变得复杂(假设您希望将实例保存在超类中)。见singleton and inheritance in Java