2012-02-18 18 views
0

GameのサブクラスDramaticGameを持つプログラムをコンパイルしようとしています。サブクラスは、以下が含ま:コンストラクタ - シンボルが見つかりません

public class DramaticGame extends Game 
{ 
    public DramaticGame(String machineName, int machineSize, String rackName, int rackSize) 
    { 
    super.makeMachine(machineName, machineSize); 
    super.makeRack(rackName, rackSize); 
    } 
} 

DramaticGame.java:5:コンストラクタゲーム()

場所:シンボル

シンボル見つけることができないクラスゲーム

{

を^

ゲームで「{」記号が見つかりませんしかし、私はこれを修正する方法がわかりません。

public Game(String paramString1, int paramInt1, String paramString2, int paramInt2) 
{ 
    this.machine = makeMachine(paramString1, paramInt1); 
    this.rack = makeRack(paramString2, paramInt2); 
} 

答えて

1

あなたのスーパークラスは、あなたのコンストラクタの最初のステートメントとしてではない 問題

super(eventual params); 

を行う場合は、暗黙的に呼び出され、デフォルトコンストラクタがありません。

+0

だから私のデフォルトのコンストラクタは何ですか?私は上の私の元の投稿の終わりにスーパークラスのコンストラクタを追加しました。ありがとう – AkshaiShah

+0

しかし、あなたはサブクラスからそれを呼び出すことはありません。 Javaは、存在しないデフォルトのコンストラクタ 'Game()'を呼び出します。 'DefaultGame()'コンストラクタでは、 'super(machineName、machineSize、rackName、rackSize)'のような呼び出しを挿入する必要があり、エラーは消えてしまいます。 – ivantod

0

いいえ、見つからないものは、デフォルトのコンストラクタです。

コンストラクタを指定しないと、コンパイラは引数なしのデフォルトコンストラクタを作成します。

しかし、あなたが書いた瞬間にはあなたは自分自身です。

私はあなたがすでにデフォルト引数で書いたものを呼び出す1を書くことをお勧めする:

public class DramaticGame extends Game 
{ 
    public DramaticGame() { 
     this("default-machine-name", 1024, "default-rack-name", 10); 
    } 

    public DramaticGame(String machineName, int machineSize, String rackName, int rackSize) 
    { 
    super.makeMachine(machineName, machineSize); 
    super.makeRack(rackName, rackSize); 
    } 
} 

あなたのゲームのコンストラクタは、ラック名とサイズを取る必要がある場合は、私も疑問に思うだろう。それらがGameクラスのメンバーであるという事実は、Gameコンストラクタに設定する必要があることを私に示唆しています。

+0

スーパークラスで使用されているコンストラクタの場合は、これがデフォルトのコンストラクタではありません。 – AkshaiShah

+0

はい、あなたはそれを書いていませんでした。 GameクラスにGameクラスがある場合は、それを呼び出す必要があります。 – duffymo

+0

元の投稿の最後に追加しました。ありがとうございました – AkshaiShah

関連する問題