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

时间:2015-02-19 01:08:41

标签: java class variables if-statement declaration

我创建了三个类,一个是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,但它可以是三个不同的类之一。我该如何解决这个错误?

4 个答案:

答案 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 {

这样,您就可以将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

答案 3 :(得分:0)

听起来你需要其他汽车继承基地Car班级。然后你可以做Car car1; if{...} car.accelerate()...否则,你需要在if语句中使用“default”子句,这样无论如何,car1都会被初始化。