Java 处理对象';s范围

Java 处理对象';s范围,java,oop,Java,Oop,我试图用Java编写一个游戏,其中包含一个Player类,该类有两个子类:HumanPlayer和ComputerPlayer。我想让用户选择与哪个玩家比赛,一旦选择,就创建相关的对象并进行比赛 因为对象是在if语句中创建的,所以编译器不允许我在if范围之外执行任何操作。在其他情况下,我会在类的范围内创建对象,但在这种情况下,我无法提前知道要创建哪个对象(人/计算机) 以下是一些用于说明的代码: public class Player { private String name;

我试图用Java编写一个游戏,其中包含一个
Player
类,该类有两个子类:
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
    }
}
利用


假设
Player
类有一个
play()
方法。我看不是。将您的类
Player
更改为具有可覆盖的
play()
方法,您可以在子类型中覆盖该方法。

完美!谢谢你的快速回复
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();