如果这个变量可以是三个不同的 类 之一,我该如何声明它?

How can I declare this variable if it can be one of three different classes?

我创建了三个 classes,一个 SportsCar Class,一个 MuscleCar Class 和一个 Car Class。在我的代码中,我让用户选择他们想要创建的汽车 class

if(carType.equals("A")){
    SportsCar car1 = new SportsCar(year,make);
}
else if(carType.equals("B")){
    MuscleCar car1 = new MuscleCar(year,make);
}
else if(carType.equals("C")){
    Car car1 = new Car(year,make);
}

我制作了一个 GUI,以便用户可以与汽车交互,但我一直收到错误消息,说找不到变量 car1

if(choice == 0){
    car1.accelerate();
    System.out.println("Your speed: " + car1.getSpeed);
    System.out.println("Your gas level: " + car1.getGasLevel);
}

我知道如果只有一辆车 class 我可以在 if 语句之前声明 car1,但它可以是三种不同的 classes 之一。我该如何解决这个错误?

听起来您需要其他汽车从基础 Car class 继承。然后你可以做 Car car1; if{...} car.accelerate()... 否则,你需要在 if 语句中有一个 "default" 子句,这样无论如何,car1 都会被初始化。

car 的范围不正确。我假设除您引用的 Car 之外的所有 class 都是 Car 的子 class。在这种情况下,您需要将 car 的声明从 if 块中移出,移到您尝试使用它的方法或 class 中。

这些 car1 变量中的每一个仅在包含它的 if 块的范围内可见。在输入第一个 if 块之前,您需要将 car1 变量声明为所有三个选项(我猜是 Car)共有的类型;例如

Car car1;

if(carType.equals("A")){
    car1 = new SportsCar(year,make);
    ...

Java 中有一个功能就是为了这个。这叫继承。

基本上,您可以使一个 class 成为另一个的子class。您为此使用 extends

public class SportsCar extends Car {

public class MuscleCar extends Car {

这允许您将任何 SportsCarMuscleCar 视为 Car。所以你可以在 if 语句之外声明变量:

Car car1;

并从 if 语句中分配给它:

if(carType.equals("A")){
    car1 = new SportsCar(year,make);
} // etc.

唯一的问题是 Java 编译器会害怕 variable car1 might not be initialized。如果 carType 不是 "A"、"B" 或 "C",那将实际发生。所以闭嘴吧:

Car car1 = null;

在您做任何事情之前,请阅读 Java tutorial on inheritance