我必須製作一個假DMV計劃,計算商業和私人車輛的年費。這兩個階級將是抽象的,他們將從一個名爲所有車輛的階級變得多元化。c#抽象類
我的老師只想要一個對象創建整個程序(在main中),但是因爲我的三個頂層類是抽象的。我不能創建一個對象,即車輛=新車();
所以我的問題是如何創建只有一個對象,因爲它們是抽象的?如果您有任何問題隨時問,我可能沒有解釋得很好...
我必須製作一個假DMV計劃,計算商業和私人車輛的年費。這兩個階級將是抽象的,他們將從一個名爲所有車輛的階級變得多元化。c#抽象類
我的老師只想要一個對象創建整個程序(在main中),但是因爲我的三個頂層類是抽象的。我不能創建一個對象,即車輛=新車();
所以我的問題是如何創建只有一個對象,因爲它們是抽象的?如果您有任何問題隨時問,我可能沒有解釋得很好...
你的階級結構將類似於:
abstract class Vehicle
{
protected abstract int BaseFee { get; }
protected abstract int ExtraFee { get; }
public int CalculateFee()
{
return BaseFee + ExtraFee;
}
}
abstract class CommercialVehicle : Vehicle
{
protected override int BaseFee
{
return 100;
}
}
class LightDutyTruck : CommercialVehicle
{
protected override int ExtraFee
{
return 50;
}
}
class Semi : CommercialVehicle
{
protected override int ExtraFee
{
return 150;
}
}
[etc...]
abstract class PrivateVehicle : Vehicle
{
protected override int BaseFee
{
return 25;
}
}
class Sedan : PrivateVehicle
{
protected override int ExtraFee
{
return 15;
}
}
等,爲每個類。在您的Main
方法中,您將根據輸入創建實例,但實際變量將聲明爲類型Vehicle
。實際計算將基於您創建的實例生效:
Vehicle v;
switch(input)
{
case "semi":
v = new Semi();
break;
case "truck":
v = new LightDutyTruck();
break;
...
}
int fee = v.CalculateFee();
你似乎有點困惑。 「所有車輛」應該是抽象的。 「商用車」和「私家車」不應該是抽象的,除非這兩個具體的子類。
你可能也不理解你的教師的意思是「只有一個對象」,因爲這沒有意義。
也許你要創建一個代表DMV的對象,但該對象的定義包括其他對象的實例。
class DMV {
private List<Vehicle> vehicles = new List<Vehicle>();
...
}
你的導師會希望你通過參照抽象基類實例化多個對象:
Vehicle conveyance;
conveyance = new PrivateVehcicle();
conveyance.Drive();
conveyance.Stop();
// or whatever ...
conveyance = new CommercialVehcicle();
conveyance.Drive();
conveyance.Stop();
即你有表現多態取決於具體類型的單個對象引用(傳送)你已經實例化了。
請在將來添加作業標籤。 – 2011-04-27 01:18:50