我正在處理一些需要將一個超類或子類對象發送給方法的代碼。將子類或超類對象傳遞給方法(期待超類對象)
方法public void repair(Vehicle vehicle)
將只訪問超類對象中的方法。
public class Vehicle {
//class stuff
}
public class Car extends Vehicle {
//class stuff
}
public static void main(String[] args)
{
// do stuff to determine whether working with a vehicle or car
if (someCondition)
{
Car = new Car();
// do some stuff...
repair(Car);
}
else
{
Vehicle = new Vehicle();
// do some stuff...
repair(Vehicle);
}
}
我想我有三種選擇:
- 離開的代碼,因爲它是,它似乎是工作。 - 我不喜歡這個選項,感覺就像我在做假設,我懷疑只有汽車的方法可能會被意外地稱爲做這件事,導致意想不到的行爲。
- 在車裏創建一個getVehicle()方法,返回一個Vehicle。然後使用
repair(Car.getVehicle());
- 這感覺好一點 - 更改
Car = new Car();
到Vehicle = new Car();
,我相信會創建一個對象(車輛),只能執行類型車輛的方法。 - 這感覺是最安全的,因爲我現在限制了可以做的事情,以防止意外的行爲。
是3,最好的方法,因爲修理方法只是期待車輛?
另外,有什麼我可以/應該去的:public void repair(Vehicle vehicle)
方法聲明?
編輯:看來我應該使用:
離開的代碼,因爲它是
因爲repair()
方法鑄子類對象的父對象呢。
那麼你的修法樣子? – RNJ
當汽車進入修理方法時,它會隱式地投射到車輛上。所以你不可能在維修方法中使用Car方法。 – BeRecursive
我認爲汽車應該延伸車輛。 –