2013-12-16 243 views
-1

我正在尝试用Java编写一个Player类,该类有两个子类:HumanPlayerComputerPlayer。我想允许用户选择与哪个玩家对战,并且一旦选择 - 创建相关对象并进行游戏。处理对象的范围

由于对象是在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

线束的

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