2016-12-07 15 views
0

"EmptySea"オブジェクトを配列に埋め込むために、別の "Ocean"クラスにオブジェクト( "Ship"クラスの "EmptySea"サブクラスで作成)をインスタンス化しようとしています。Java - 別のクラスのサブクラスコンストラクタへのアクセス

エラーは「EmptySeaはタイプに解決できません」です。

public class Ocean { 

    // Instance variables. 
    public Ship[][] ships = new Ship[10][10]; 
    public int shotsFired; 
    public int hitCount; 

    // Constructor. 
    public Ocean() { 
     shotsFired = 0; 
     hitCount = 0; 
     for (int row = 0; row < ships.length; row++) { 
      for (int column = 0; column < ships[row].length; column++) { 
       ships[row][column] = new EmptySea(); 

public abstract class Ship { 

    // Instance variables. 
    private int bowRow; 
    private int bowColumn; 
    private int length; 
    private boolean horizontal; 
    private boolean[] hit = new boolean[4]; 

    // No constructor needed for Ship class. 

    // Methods (too many to show). 

    public class EmptySea extends Ship { 

     // Constructor. 
     EmptySea() { 
      length = 1; 
     } 

     // Inherited methods to define. 
     int getLength() { 
      return length = 1; 
     } 

     String getShipType() { 
      return "Empty"; 
     } 

     @Override 
     boolean shootAt(int row, int column) { 
      return false; 
     } 

     @Override 
     boolean isSunk() { 
      return false; 
     } 

     @Override 
     public String toString() { 
      return "-"; 
     } 
    } 

船アレイが正しくオーシャンクラスのインスタンス変数として宣言されています:

は、ここに私のオーシャンクラスコードです。基本的にはEmptySea()オブジェクト( "Ship"クラスのコードと "EmptySea"サブクラスが正しく動作する)を置くことはできません。

この場合、何とかスーパークラスを参照する必要がありますか?

もっと簡単な方法があれば、私はそうすることができません(この方法は割り当てで指定されています)。

+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/130016/discussion-on-question-by-broncosaurus-java-accessing-a-subclass-constructor-i)。 –

答えて

0

static nested class and an instance nested classの違いについては、こちらをご覧ください。

他にも同じSO questionがあります。

短期:その後、理由を理解する/読み、静的であなたの内EmptySeaクラスを宣言 - 簡単に、staticなしEmptySeaインスタンスはShipインスタンスのコンテキスト外部で作成することができません。

関連する問題