4

I have three classes which I have a problem with. They are named: GameScene, StageScene, StageOne. My problem is that I want to implement initialize in StageScene, but still force StageOne to implement it, so that whenever someone uses a StageOne object (stageOne.initialize()), initialize would be run for both StageScene and StageOne. Anyone know how this could be done?

public abstract class GameScene 
{
    public abstract void initialize();
}

public abstract class StageScene extends GameScene
{
    public abstract void initialize()
    {
        //Some code
    }
}
public class StageOne extends StageScene
{
    public void initialize()
    {
        //Some code
    }
}
Alle
  • 324
  • 4
  • 19

2 Answers2

7

you can do it with a wrapper:

public abstract class StageScene extends GameScene
{
    final public void initialize()
    {
        //your initialization
        subInitialize();
    }

    protected abstract void subInitialize();
}

And in the child class:

public class StageOne extends StageScene
{
    public void subInitialize()
    {
        //Some code
    }
}
MByD
  • 135,866
  • 28
  • 264
  • 277
1

You could break it into two separate methods

public abstract class GameScene 
{
    public abstract void initializeScene();
    public abstract void initializeStage();
}

public abstract class StageScene extends GameScene
{
    public void initializeScene()
    {
        //Some code
    }
}
public class StageOne extends StageScene
{
    public void initializeStage()
    {
        //Some code
    }
}
Capn Sparrow
  • 2,030
  • 2
  • 15
  • 32