0

我正在尝试用 Java 创建一个使用 UnityScript 的语法和结构的游戏引擎,目前我已经弄清楚了其中的大部分内容。我唯一苦苦挣扎的是在从超类实例化一个类时能够调用函数。

例子:

对象超类:

public class Object {
   public Object(){
       Start();
   }
   public void Start(){
   }
}

游戏对象子类:

public class GameObject extends Object {
   public GameObject(){
   }
   public void Start(){
   }
}

我想要发生的事情是,当我创建一个新的游戏对象或从游戏对象扩展的任何东西时,在实例化时调用 Start() 函数,最好不使用 super() 语句。

4

2 回答 2

2

如果您排除该语句,将自动调用父无参数构造函数super,因此您的代码将按原样工作。

于 2013-10-22T15:36:37.810 回答
1

修复您的方法名称以遵循约定。

让您的超类实现一个private执行其一般逻辑的方法,然后调用该start()方法,可能是您的子类。private在超类的构造函数中调用此方法。

你的超类

public abstract class SomeObject {
   public Object(){
       objectStart();
   }
   private void objectStart(){
       // do something general
       start();
   }

   public abstract void start();
}

游戏对象子类:

public class GameObject extends SomeObject {
    public GameObject(){
        // implicitly calls super() which will call objectStart() which will call start()
    }
    @Override
    public void start(){
    }
}

SomeObject现在,当实例化任何子类时,它的start()方法将被执行。

如果您不希望该类是抽象的,只需实现一个无操作start()方法

于 2013-10-22T15:36:06.027 回答