[英]How to instantiate a super class static variable in sub class as final
我正在模擬一個停車場應用程序。 並有一個Vehicle
類,該類是由Car
, Truck
等具體類抽象和擴展的。我有一個變量parkingFare
,對於Vehicle
每個子類,它將實例化為類變量和final,以便該特定類的所有實例都可以使用相同的值。 例如,如果我設置parkingFare
的Car
,用$ 2,應該是所有場合的同一Car
。 問題是我無法在具體類中以類變量的形式訪問此變量。
public abstract class Vehicle {
String plateNo;
LocalTime startTime;
static int parkingFare;
public abstract int getFare();
public abstract String getPlateNo();
public abstract LocalTime getParkedTime();
}
public class Car extends Vehicle {
final parkingFare = 2; // how I want to instantiate it.
public Car(String plateNo){
this.plateNo = plateNo;
this.startTime = LocalTime.now();
}
@Override
public LocalTime getParkedTime(){
return startTime;
}
@Override
public String getPlateNo(){
return plateNo;
}
@Overrid
public int getFare(){
return parkingFare;
}
}
使用靜態塊:
public class Car extends Vehicle {
static {
parkingFare = 2;
}
// ...
}
但是,這使得在所有車輛類中,無論子類如何,parkingFare均相等。 例如,讓另一個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如何存儲靜態變量相混淆,但隨后我進行了測試,當前描述是准確的)
在您的子類中使用它
static {
parkingFare=10;
}
由於靜態變量與實例中未涉及的類相關,因此Class的所有實例都將共享靜態變量。
因此,在初始化parkingFare=10
所有Class Car
實例將具有相同的停車費。
現在來發表您的評論,您需要將它們設為不能在兒童班級中決賽,如果要使其final
,則需要在Vehicle Class
聲明parkingFare
為最終決賽。
我認為,如果您想使汽車的價格為2美元,則應將static final變量移至該類。
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.