我创建了三个类,一个是SportsCar类,一个是MuscleCar类,另一个是Car 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);
}
我知道如果只有一个汽车类,我可以在if语句之前声明car1,但它可以是三个不同的类之一。我该如何解决这个错误?
答案 0 :(得分:2)
每个car1变量只能在包含它的if块的范围内可见。您需要在输入第一个if块之前将car1变量声明为所有三个选项(我猜Car)通用的类型;例如
Car car1;
if(carType.equals("A")){
car1 = new SportsCar(year,make);
...
答案 1 :(得分:1)
car
的范围不正确。我假设你引用的汽车以外的所有类都是Car的子类。在这种情况下,您需要将car
的声明从if块移出到您尝试使用它的方法或类中。
答案 2 :(得分:1)
Java中的一个功能就是为此。它被称为继承。
基本上,您可以将一个类作为另一个类的子类。您可以使用extends
:
public class SportsCar extends Car {
或
public class MuscleCar extends Car {
这样,您就可以将SportsCar
或MuscleCar
视为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。
答案 3 :(得分:0)
听起来你需要其他汽车继承基地Car
班级。然后你可以做Car car1; if{...} car.accelerate()...
否则,你需要在if语句中使用“default”子句,这样无论如何,car1都会被初始化。