簡體   English   中英

如何將子類中的超類靜態變量實例化為final

[英]How to instantiate a super class static variable in sub class as final

我正在模擬一個停車場應用程序。 並有一個Vehicle類,該類是由CarTruck等具體類抽象和擴展的。我有一個變量parkingFare ,對於Vehicle每個子類,它將實例化為類變量和final,以便該特定類的所有實例都可以使用相同的值。 例如,如果我設置parkingFareCar ,用$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM