2012-05-20 3 views
2

В настоящее время я изучаю Java, и я действительно борюсь с чем-то. Поэтому у меня есть класс «Диск» с подклассами «CD», «Игра» и «DVD». У меня есть класс базы данных, который создает новые экземпляры диска, игры и cd в списке массивов. Список массив инициализируется следующим образом:Как я могу получить доступ к методам в подклассе

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

Я затем добавить экземпляр игры в массив:

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

Я пытаюсь получить доступ к методу, «getConsole» в игре подкласса с использованием следующий код:

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

В нем говорится, что метод getConsole не существует. Я вижу, что проблема заключается только в том, что это доступ к методам и полям класса диска, но как я могу это сделать, чтобы он мог получить доступ к методам подкласса, который он определен как. Спасибо за ваше время :)

ответ

0

Вы должны бросить его обратно Game:

Game myGame = (Game)disks.get(3); 
0

Диск не знает о методе в игре, для того, чтобы использовать его, вам нужно бросить его как игра. Вы также должны в большинстве случаев проверить, чтобы убедиться, что это infact Game, а не другой тип подкласса.

Disk disk = new Game(); 

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

Edit: Забыл добавить, чтобы проверить, если это из использования типа InstanceOf

if (disk instanceof Game) 
{ 
    // do things 
} 
4

Поскольку getConsole() доступна только на Game подкласса, вам нужно сказать Java, что вы знаете, что глядя на Game, и поверг в явном виде:

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

Это не очень хороший способ, чтобы сделать что-то в Java, потому что вы явно тестирования для го e тип подкласса.

0

Вам нужно будет проверить, действительно ли объект является объектом «Игра», используя оператор instanceof. Затем вы можете отдать его в игру и использовать его для доступа к всем участникам и методам игры.

Disk currentDisk = disks.get(3); 
if (currentDisk instanceof Game) { 
Game game = (Game) currentDisk; 
game.getConsole(); 
} 
Смежные вопросы