[英]Why subclasses inherit private fields?
我正在創建一個新的 class 這是車輛。 我期待唯一受保護的變量繼承給子類。 但是當我嘗試使用 IDE 創建構造函數時,它是否也在使用超類私有變量? - 這是私人字符串車輛名稱 - 我不清楚這種情況。 我不應該使用自動構造函數嗎?
public class Vehicle {
protected int capacityOfPassengers;
protected String mapOfRoute;
private String vehicleName;
public Vehicle(int capacityOfPassengers, String mapOfRoute,
String vehicleName) {
this.capacityOfPassengers = capacityOfPassengers;
this.mapOfRoute = mapOfRoute;
this.vehicleName = vehicleName;
}
}
public class LandVehicle extends Vehicle {
private String brand;
private int priceModel;
public LandVehicle(int capacityOfPassengers, String mapOfRoute,
String vehicleName, String brand, int priceModel) {
super(capacityOfPassengers, mapOfRoute, vehicleName);
this.brand = brand;
this.priceModel = priceModel;
}
}
您不能從 LandVehicle 訪問 vehicleName。 您只需將一些字符串參數傳遞給超級構造函數,超級構造函數就會設置車輛名稱。 例如,您不能在 LandVehicle class 中將此字段初始化為this.vehicleName = vehicleName
。
通常,class 有一個默認構造函數,如果您沒有提供構造函數,則不使用 arguments。
當您使用LandVehicle
子類Vehicle
時,您的LandVehicle
是Vehicle
的一種。 這意味着它從其超類繼承方法和字段,即使它們是私有的。 對於 class LandVehicle
,這些成員只是不可見,但它們仍然存在 - 否則它無法正確 function。 private 關鍵字是一個訪問修飾符,它改變調用者的可見性。
因此,要實例化LandVehicle
,您還必須提供其超類Vehicle
的必需屬性(因為Vehicle
中沒有默認的、無參數的構造函數)。 在您的示例中,沒有名稱(來自Vehicle
)的LandVehicle
沒有意義,因為LandVehicle
是Vehicle
,它需要名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.