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