如何在子类中实例化超类静态变量作为final

时间:2015-02-21 18:28:52

标签: java oop inheritance class-variables

我正在模拟停车场申请。并且有一个类Vehicle,它是抽象的,并由CarTruck等具体类扩展。我有一个变量parkingFare,每个子类为{{1}将被实例化为类变量和final,以便该特定类的所有实例都可以使用相同的值。例如,如果我将Vehicle的{​​{1}}设置为$ 2,则parkingFare的所有实例都应该相同。问题是我无法在我的具体类中将此变量作为类变量访问。

Car

3 个答案:

答案 0 :(得分:0)

使用static-block:

public class Car extends Vehicle {

    static {
        parkingFare = 2;
    }

    // ...
}

然而,这使得parkingFare在所有Vehicle-class中都相等,而不管子类。例如,让另一个Vehicle子类Bus设置parkingFare = 10并运行:

Car car = new Car("Car");
Bus bus = new Bus("Bus");
System.out.println(car.getFare());
System.out.println(bus.getFare());

结果10被打印两次。

将parkingFare添加到每个子类将解决此问题。

(双重编辑:与java存储静态变量的方式混淆,但后来我测试了,目前的描述是准确的)

答案 1 :(得分:0)

在您的子类

中使用此功能
static {
 parkingFare=10;
}
  

由于静态变量与不在实例中的类有关,所以   Class的所有实例都将共享静态变量。

因此,在初始化parkingFare=10后,Class Car的所有实例都将拥有相同的停车费。

现在来到你的评论你需要让他们在孩子课上做最后你不能,如果你想让他们成为final你需要在parkingFare中宣布Vehicle Class为最终版本}

答案 2 :(得分:0)

我认为如果您想让汽车花费2美元,那么您应该将静态最终变量移动到该类。

public abstract class Vehicle {

 String plateNo;
 LocalTime startTime;
 public abstract int getFare();
 public abstract String getPlateNo();
 public abstract LocalTime getParkedTime();

}


 public class Car extends Vehicle {

   static final int parkingFare = 2;

   ...
   @Override
   public final int getFare() {
     return parkingFare;
   }   
}