【问题标题】:Calling a single method from a list of methods of an interface [closed]从接口的方法列表中调用单个方法[关闭]
【发布时间】:2013-01-11 02:56:54
【问题描述】:

有人能解释一下为什么getStartScreen() 是接口Game 中唯一被添加为MrNomGame 类中未实现方法的方法吗?

public class MrNomGame extends AndroidGame 
{
     public Screen getStartScreen() 
     {
        return new LoadingScreen(this); // Instantiate class
     }
}

public abstract class AndroidGame extends Activity implements Game 
{
     AndroidFastRenderView renderView;
     Graphics graphics;
     Audio audio;
     Input input;
     FileIO fileIO;
     Screen screen;
     WakeLock wakeLock;

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
    int frameBufferWidth = isLandscape ? 480 : 320;
    int frameBufferHeight = isLandscape ? 320 : 480;
    Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
            frameBufferHeight, Config.RGB_565);

    float scaleX = (float) frameBufferWidth
            / getWindowManager().getDefaultDisplay().getWidth();
    float scaleY = (float) frameBufferHeight
            / getWindowManager().getDefaultDisplay().getHeight();

    renderView = new AndroidFastRenderView(this, frameBuffer);
    graphics = new AndroidGraphics(getAssets(), frameBuffer);
    fileIO = new AndroidFileIO(this);
    audio = new AndroidAudio(this);
    input = new AndroidInput(this, renderView, scaleX, scaleY);
    screen = getStartScreen();  //unimplemented method from MrNomGame
    setContentView(renderView);

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");
}

@Override
public void onResume() {
    super.onResume();
    wakeLock.acquire();
    screen.resume();
    renderView.resume();
}

@Override
public void onPause() {
    super.onPause();
    wakeLock.release();
    renderView.pause();
    screen.pause();

    if (isFinishing())
        screen.dispose();
}

public Input getInput() {
    return input;
}

public FileIO getFileIO() {
    return fileIO;
}

public Graphics getGraphics() {
    return graphics;
}

public Audio getAudio() {
    return audio;
}

public void setScreen(Screen screen) {
    if (screen == null)
        throw new IllegalArgumentException("Screen must not be null");

    this.screen.pause();
    this.screen.dispose();
    screen.resume();
    screen.update(0);
    this.screen = screen;
}

public Screen getCurrentScreen() {
    return screen;
}

}

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();
}

【问题讨论】:

  • 我认为您的意思是唯一被覆盖或实现的方法..问题含糊不清..
  • 我假设 Activity 在您未显示的代码中实现了其他方法(或代码无法编译)
  • 您的描述也与标题无关。
  • 你确定这段代码可以编译吗?
  • 我添加了来自抽象类 AndroidGame 的所有代码。请看一看。

标签: java android interface abstract-class


【解决方案1】:

MrNomGame 类扩展了一个抽象类 AndroidGameMrNomGame 是一个具体类,它必须实现其父类的所有抽象方法。抽象类 AndroidGame 没有实现 getStartScreen() 方法,因此,它被添加为 MrNomGame 类中的未实现方法。

【讨论】:

  • Yogesh,但是为什么只有 getStartScreen() 方法被添加为未实现的方法?顺便说一句,我添加了抽象类 AndroidGame 中的所有代码。请看一看。
  • 因为抽象类中的方法不是抽象的。如果您将它们声明为抽象的,您将强制任何扩展类覆盖该方法。
  • 知道了!现在它很有意义。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2018-08-23
相关资源
最近更新 更多