2013-12-16 2 views
-1

Я пытаюсь написать игру на Java с классом Player, который имеет 2 подкласса: HumanPlayer и ComputerPlayer. Я хочу разрешить пользователю выбирать, какой игрок играть против, и как только он выбран - создать соответствующий объект и сыграть.Работа с областью объекта

Поскольку объект создается в инструкции if, компилятор не позволяет выполнять какие-либо операции вне области if. В других случаях я хотел бы создать объект в пределах области видимости класса, но в данном случае я не могу знать заранее, какой объект для создания (человек/компьютер)

Вот код для иллюстрации:

public class Player { 
    private String name; 

    public String getName(){ 
     return name; 
    } 
} 

public class HumanPlayer extends Player { 
    public void play(){ 
     System.out.println("Human playing"); 
    } 
} 

public class ComputerPlayer extends Player { 
    public void play(){ 
     System.out.println("Computer playing"); 
    } 
} 

import java.util.Scanner; 
public class PlayerDriver { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Please type 1 for human, 2 for computer"); 
     int selection = in.nextInt(); 
     if (selection==1){ 
      HumanPlayer player = new HumanPlayer(); 
     } else if (selection==2){ 
      ComputerPlayer player = new ComputerPlayer(); 
     } else { 
      throw new IllegalArgumentException("invalid answer"); 
     } 
     Player.play(); //can't do that 
    } 
} 

ответ

3

Harness сила

Player player = null; // player should never be null as you would have thrown an exception, but for the sake of completeness 
if (selection == 1){ 
    player = new HumanPlayer(); 
} else if (selection == 2){ 
    player = new ComputerPlayer(); 
} else { 
    throw new IllegalArgumentException("invalid answer"); 
} 
player.play(); 

предполагая Player класс имеет метод play(). Я вижу, что нет. Измените свой класс Player на переопределяемый метод play(), который вы переопределите в подтипах.

+0

Отлично! Спасибо за быстрый ответ – user2314782

Смежные вопросы