【问题标题】:Why implement the inherited abstract method?为什么要实现继承的抽象方法?
【发布时间】:2013-10-14 05:45:23
【问题描述】:

我对“开始 android 游戏”一书,第 3 章,pg.100-101 有一些困惑。我想我已经按照书上的说明进行操作,但是 IDE 仍然给我这个错误:

MyAwesomeGame 类型必须实现继承的抽象方法 Game.getFileIO()

我该如何解决它,还是我还没有掌握它的工具?

这里是代码:

public class MyAwesomeGame extends AndroidGame {
    public Screen getStartScreen(){
        return new MySuperAwesomeStartScreen(this);
    }
}


public abstract class AndroidGame implements Game {

}


public interface Game {
    public Input getInput();

    public FileIO getFileIO();

    public Graphics getGraphics();

    public Audio getAudio();

    public void setScreen(Screen screen);

    public Screen getCurrentScreen();

    public Screen getStartScreen();
}

【问题讨论】:

  • 这不是唯一的错误。您必须在 MyAwesomeGame 类中实现您在 Game 中声明的所有函数。
  • 您似乎不太了解实现方面的一些内容。你认为这意味着什么? (我不是要刻薄,而是要尝试理解这种混乱。)
  • 我的意思是实现的理论和概念。在这种情况下,即使我遵循了本书的代码,仍然弹出错误的原因。
  • "当抽象类被子类化时,子类通常为其父类中的所有抽象方法提供实现。但是,如果没有,则子类也必须声明为抽象的。”查看此站点以获取有关 Java 抽象类的更多信息:docs.oracle.com/javase/tutorial/java/IandI/abstract.html
  • 如果这是本书的代码,则本书提供的代码不完整。如果书上说代码是完整的,书上就错了。给定一本书和 javac,如果他们不同意,你几乎总是可以假设 javac 是正确的。

标签: java android class abstract


【解决方案1】:

具体类必须实现其祖先抽象类的所有抽象方法。

在您的情况下,抽象父类 - AndroidGame - 实现了一个接口 - Game,因此该抽象类的每个具体子类(例如您的 MyAwesomeGame 类)必须实现该接口的所有方法.

【讨论】:

  • 感谢您的回复,但是上面显示的代码与“开始 android 游戏”一书中显示的代码完全相同。假设可以正常工作。实施 adstract 方法确实清除了红色下划线错误,但它不适用于模拟器/设备..
  • @user2779114 很抱歉,我没有那本书。我所拥有的只是您发布的代码,而我的回答说明了它有什么问题。至于为什么在您修复错误后它不起作用,这是一个不同的问题,如果不了解您的代码和您遇到的错误,我无法回答。
【解决方案2】:

当您尝试创建实现接口的类时,您必须实现类中的所有方法,因为接口中的所有方法都是隐式抽象的。

在您的情况下,您尚未在具体子类或抽象类中实现 Game 接口的任何方法。这就是问题的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多