Java 在一行中调用所有相同的命名方法

Java 在一行中调用所有相同的命名方法,java,game-engine,lwjgl,Java,Game Engine,Lwjgl,我想在我的游戏引擎(用JavaSE编写)中创建类似“行为逻辑”的东西,但我没有创建,因此我不知道如何确保自动调用所有子类方法。它的工作原理与Unity3D的行为(如Update()、Start()…)类似,但用于逻辑。在这里,我提供了实现它的尝试 public abstract class Behaviour { void Start(){} abstract void Update(){} } 该类由DaturaBehavior类继承 public class Dat

我想在我的游戏引擎(用JavaSE编写)中创建类似“行为逻辑”的东西,但我没有创建,因此我不知道如何确保自动调用所有子类方法。它的工作原理与Unity3D的行为(如Update()、Start()…)类似,但用于逻辑。在这里,我提供了实现它的尝试

public abstract class Behaviour {
     void Start(){}

     abstract void Update(){}

}
该类由DaturaBehavior类继承

public class DaturaBehaviour extends Behaviour{

public void AppInit()
{
    Start();
    System.out.println("foo");
}

public void AppRun()
{
    Update();
    OnGUI();
}

}
从这里我定义了将被调用的方法(例如在引擎初始化中的AppInit方法,在绘制的每个帧中AppRun)

所以这些就是这个系统的基础。我还上了一堂测试课:

public class TestBehaviour extends DaturaBehaviour {

@Override
void Start()
{
    System.out.println("bar");//this isn't called dunno why
}
}

这是我第一次尝试用Java制作游戏,如果这是一个显而易见的东西,请不要生气。谢谢

I don't know how to make sure that all the subclass methods are called automatically
您必须知道调用什么以及在方法中使用哪些参数。在代码中的某个时刻,您必须手动编写要调用的方法和顺序

编辑:

啊,我可能知道你在想什么。这就是如何做到这一点的方法:

private class Something {
    public void yeah() {
        System.out.println("");            
    }
}

private class Something2 extends Something{        
    @Override
    public void yeah(){
        super.yeah();
    }
}
EDIT2:好吧,这只是猜测,但我想你可能想要的是:

private static abstract class Animal{
    abstract void sound();       
}

private static class Dog extends Animal{
    @Override
    void sound() {
        System.out.println("haf");
    }        
}

private static class Cow extends Animal{
    @Override
    void sound() {
        System.out.println("mooooo");
    }
}


/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    List<Animal> animals = new ArrayList<>();
    animals.add(new Dog());
    animals.add(new Cow());
    animals.add(new Dog());
    animals.add(new Dog());
    animals.add(new Dog());
    animals.add(new Cow());
    animals.add(new Cow());
    animals.add(new Cow());
    animals.add(new Dog());
    animals.add(new Cow());
    animals.add(new Dog());
    animals.add(new Dog());
    animals.add(new Cow());
    animals.add(new Dog());
    animals.add(new Cow());
    animals.add(new Dog());
    animals.add(new Dog());

    for (Animal animal : animals){
        animal.sound();
    }
}

我知道,我想调用,因此您会看到AppInit,它将(但不)调用我计划覆盖的子类方法,而不带参数。上面的例子不起作用的问题,我给出了我想要如何实现它的见解,但不幸的是它失败了:(那么你必须更具体地说明你到底想要实现什么,以及它在哪里没有像你认为的那样起作用。我试着调用示例Start()一次所有的子类都会自动调用Start()方法(但只有在它们重写了Start()方法的情况下)我想我找到了答案,签出了编辑过的答案:)好吧,足够接近了,但在扩展类中,我想定义该对象的行为并从超类调用,所以你的答案是可以的,但我想要的是完全相反的:D(从某个东西调用yeah,这将触发子类yeah方法的自动调用)
haf
mooooo
haf
haf
haf
mooooo
mooooo
mooooo
haf
mooooo
haf
haf
mooooo
haf
mooooo
haf
haf