2011-04-27 110 views
1

我必須製作一個假DMV計劃,計算商業和私人車輛的年費。這兩個階級將是抽象的,他們將從一個名爲所有車輛的階級變得多元化。c#抽象類

我的老師只想要一個對象創建整個程序(在main中),但是因爲我的三個頂層類是抽象的。我不能創建一個對象,即車輛=新車();

所以我的問題是如何創建只有一個對象,因爲它們是抽象的?如果您有任何問題隨時問,我可能沒有解釋得很好...

+0

請在將來添加作業標籤。 – 2011-04-27 01:18:50

回答

0

你的階級結構將類似於:

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(); 
0

你似乎有點困惑。 「所有車輛」應該是抽象的。 「商用車」和「私家車」不應該是抽象的,除非這兩個具體的子類。

你可能也不理解你的教師的意思是「只有一個對象」,因爲這沒有意義。

+0

是的商業和私人車輛將有自己的具體子類4每個具體......教師寫道:「如果你的主要方法只使用一個變量,參考車輛類,todo處理所有七種數據」 – John 2011-04-27 01:24:49

+0

他可能意味着「Vehicle someTypeOfVehicle = new ConcreteClass();'。這將處理任何類型的車輛。 – 2011-04-27 01:26:46

+0

我將通過switch語句傳遞對象,因此用戶將輸入數據的任何類型的車輛,那麼這些數據是特定於他們所選擇的 – John 2011-04-27 01:31:35

0

也許你要創建一個代表DMV的對象,但該對象的定義包括其他對象的實例。

class DMV { 
private List<Vehicle> vehicles = new List<Vehicle>(); 
... 
} 
0

你的導師會希望你通過參照抽象基類實例化多個對象:

Vehicle conveyance; 
conveyance = new PrivateVehcicle(); 
conveyance.Drive(); 
conveyance.Stop(); 
// or whatever ... 
conveyance = new CommercialVehcicle(); 
conveyance.Drive(); 
conveyance.Stop(); 

即你有表現多態取決於具體類型的單個對象引用(傳送)你已經實例化了。