2016-05-28 13 views
-1

私は内部クラスで動作するようにしようとしていますし、私それらについていくつかの質問 私はエラーを取得していないこのゲームオブジェクトのクラス構造でのJava - 内部クラス

import java.io.*; 
public abstract class GameObject implements Serializable { 
    protected enum GAME_OBJECT_TYPE {SNARK, HINT, BONUS_ITEM, INVALID}; 
    protected GAME_OBJECT_TYPE eGameObjectType; 
    protected GameObject() { 
     eGameObjectType = (GAME_OBJECT_TYPE.INVALID); 
     System.out.println("SOMETHING WENT WRONG"); 
    } 
    public class Snark extends GameObject implements Serializable { 
     public Snark() { 
      eGameObjectType = (GAME_OBJECT_TYPE.SNARK); 
      System.out.println("SNARK LIVES HERE"); 
     } 
    } 
    public class Hint extends GameObject implements Serializable { 
     public Hint() { 
      eGameObjectType = (GAME_OBJECT_TYPE.HINT); 
      System.out.println("HINT LIVES HERE"); 
     } 
    } 
} 

を次のように私はゲームオブジェクトのクラスを持っていますが、唯一の方法Iエラーなしで私のGameFrameにスナークをインスタンス化することができますしかし、私は

import java.io.*; 
public abstract class GameObject implements Serializable { 
    protected enum GAME_OBJECT_TYPE {SNARK, HINT, BONUS_ITEM, INVALID}; 
    protected GAME_OBJECT_TYPE eGameObjectType; 
    protected GameObject() { 
     eGameObjectType = (GAME_OBJECT_TYPE.INVALID); 
     System.out.println("SOMETHING WENT WRONG"); 
    } 
}  
public class Snark extends GameObject implements Serializable { // The public type Snark must be defined in its own file 
    public Snark() { 
     eGameObjectType = (GAME_OBJECT_TYPE.SNARK); 
     System.out.println("SNARK LIVES HERE"); 
    } 
}  
public class Hint extends GameObject implements Serializable { 
    public Hint() { 
     eGameObjectType = (GAME_OBJECT_TYPE.HINT); 
     System.out.println("HINT LIVES HERE"); 
    } 
} 
にゲームオブジェクトクラスを変更する場合

GameObject mySnark = new GameObject.Snark(); // all good 
GameObject mySnark = new Snark(); // cannot be resolved 

です

GameObject mySnark = new Snark(); // no errors 

は私が再分割することができ、それぞれが再び独自のクラスにオブジェクトが、それは、これは非常に、現在Iクラスの数を減らすための方法かもしれないと思ったように私は今、私のGameFrameにスナークをインスタンス化することができます

持ってる。

誰かが私が間違っていることを理解するのに役立つことができますか?

+1

さまざまなクラス(Snarkなど)をGameObjectに移動することで達成しようとしていることは何ですか? –

+1

さて、コンパイラは正しいです。これらの型の内部クラスとは異なる構文を使用する必要があります。私はあなたが内部クラスを継承と混同しているかもしれないと思います。 2つは全く異なっています。 – markspace

+1

コンパイラが正しい場合は、インスタンス化する際に内部クラスを完全修飾する必要があります。 –

答えて

1

内部クラスは、(あなたの質問が示すように)、プロジェクト内のクラスの数を減らすために意図されていないありがとう。特定の親クラスに機能を論理的にグループ化することについてです。最も一般的には、親クラスに固有のヘルパークラスです。内部クラスは、通常、含まれる親クラスも拡張しません。

SnarkのオブジェクトをGameObjectの外部にインスタンス化する必要があるようです。これは、Snarkが独立したクラスである必要があることを示しています。

さらに詳しい情報はinner classesからOracleのJavaDocをご覧ください。

+0

こんにちはCoolBots 明るい回答ありがとうございます。 はい、私はまだ内部クラスと親子クラスの間で非常に不安定であると思います。 – Walkerbo

関連する問題