2

私は現在Javaを学んでいて、何かに本当に苦労しています。したがって、サブクラス「CD」、「ゲーム」、および「DVD」を持つクラス「ディスク」があります。配列リストにディスク、ゲーム、および cd の新しいインスタンスを作成する「データベース」クラスがあります。配列リストは次のように初期化されます。

private ArrayList<Disk> disks = new ArrayList(); 

次に、Game のインスタンスを配列に追加します。

disks.add(new Game(1999,"SuperGame!",900,"xbox","ea"));

次のコードを使用して、Game サブクラスのメソッド「getConsole」にアクセスしようとしています。

Disk currentDisk = disks.get(3);
currentDisk.getConsole();

getConsole メソッドが存在しないと表示されます。問題は、Disk クラスのメソッドとフィールドにのみアクセスしていることですが、定義されているサブクラスのメソッドにアクセスできるようにするにはどうすればよいでしょうか。御時間ありがとうございます :)

4

4 に答える 4

4

getConsole()はサブクラスでのみ使用できるためGame、Java に、 を見ていることを知っていることを伝え、Game明示的にキャストする必要があります。

Disk currentDisk = disks.get(3);
if (currentDisk instanceof Game) {
    ((Game)currentDisk).getConsole();
}

これは、サブクラスのタイプを明示的にテストしているため、Java で物事を行うにはあまり良い方法ではありません。

于 2012-05-20T12:44:45.160 に答える
0

次のようにキャストする必要がありますGame

  Game myGame = (Game)disks.get(3);
于 2012-05-20T12:43:24.730 に答える
0

Disk は Game のメソッドを認識していません。それを使用するには、Game としてキャストする必要があります。また、ほとんどの場合、それが実際にゲームであり、別のサブクラス タイプではないことを確認する必要があります。

Disk disk = new Game();

(Game)disk.getConsole(); // notice the cast

編集:追加するのを忘れて、インスタンスタイプを使用しているかどうかを確認しました

if (disk instanceof Game)
{
    // do things
}
于 2012-05-20T12:44:44.523 に答える
0

instanceof 演算子を使用して、オブジェクトが実際に「ゲーム」オブジェクトであるかどうかを確認する必要があります。次に、それを Game にキャストし、それを使用してすべてのゲームのパブリック メンバーとメソッドにアクセスできます。

Disk currentDisk = disks.get(3);
if (currentDisk instanceof Game) {
 Game game = (Game) currentDisk;
 game.getConsole();
}
于 2012-05-20T12:45:44.640 に答える