0

UnityScript の構文と構造を使用する Java でゲーム エンジンを作成しようとしていますが、現時点ではそのほとんどを把握しています。私が苦労しているのは、スーパークラスからクラスをインスタンス化するときに関数を呼び出せることだけです。

例:

オブジェクトのスーパークラス:

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

ゲームオブジェクトのサブクラス:

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

私がやりたいことは、新しいゲームオブジェクトまたはゲームオブジェクトから拡張されたものを作成するときに、できればsuper()ステートメントを使用せずに、インスタンス化されたときにStart()関数を呼び出すことです。

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()メソッドが実行されます。

クラスを抽象化したくない場合は、no-opstart()メソッドを実装するだけです

于 2013-10-22T15:36:06.027 に答える