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

Java 如果这个变量可以是三个不同类中的一个,我如何声明它?,java,class,variables,if-statement,declaration,Java,Class,Variables,If Statement,Declaration,我创造了三个等级,一个跑车等级,一个马斯莱卡等级和一个汽车等级。在我的代码中,我让用户选择他们想要创建的汽车类别 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 ca

我创造了三个等级,一个跑车等级,一个马斯莱卡等级和一个汽车等级。在我的代码中,我让用户选择他们想要创建的汽车类别

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


我知道如果只有一个car类,我可以在if语句之前声明car1,但它可以是三个不同类中的一个。如何修复此错误?

听起来您需要从基本
Car
类继承其他汽车。然后你可以做
car1;if{…}car.accelerate()…
否则,在if语句中需要一个“default”子句,这样无论发生什么情况,car1都会被初始化。

听起来像是需要其他车从基本
car
类继承。然后你可以做
car1;if{…}car.accelerate()…
否则,在if语句中需要一个“default”子句,这样无论发生什么情况,car1都会被初始化。

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

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

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

Car car1;

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

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

Car car1;

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

Java中有一个特性就是为了实现这一点。这叫做继承

基本上,您可以使一个类成为另一个类的子类。您可以使用
扩展

public class SportsCar extends Car {

这允许您将任何
跑车
跑车
视为
汽车
。因此,您可以在
if
语句之外声明变量:

Car car1;
if(carType.equals("A")){
    car1 = new SportsCar(year,make);
} // etc.
只需从
if
语句中为其赋值:

Car car1;
if(carType.equals("A")){
    car1 = new SportsCar(year,make);
} // etc.
唯一的问题是Java编译器会害怕
变量car1可能没有初始化。如果
carType
不是“A”、“B”或“C”,则实际会发生这种情况。所以闭嘴吧:

Car car1 = null;

在做任何事情之前,请先阅读。

Java中有一个功能正是为了实现这一点。这叫做继承

基本上,您可以使一个类成为另一个类的子类。您可以使用
扩展

public class SportsCar extends Car {

这允许您将任何
跑车
跑车
视为
汽车
。因此,您可以在
if
语句之外声明变量:

Car car1;
if(carType.equals("A")){
    car1 = new SportsCar(year,make);
} // etc.
只需从
if
语句中为其赋值:

Car car1;
if(carType.equals("A")){
    car1 = new SportsCar(year,make);
} // etc.
唯一的问题是Java编译器会害怕
变量car1可能没有初始化。如果
carType
不是“A”、“B”或“C”,则实际会发生这种情况。所以闭嘴吧:

Car car1 = null;

在你做任何事情之前,请先阅读。

你是否在你的汽车类中使用了
extends
?你是否在汽车类中使用了
extends
?这不是因为汽车是可见的,而是变量在该范围内是可见的……是的,措辞如此糟糕,我没有。。UpdateEdit并不是说汽车是可见的,而是变量在这个范围内是可见的…是的,措辞很糟糕,我没有。。更新