2012-08-31 55 views
0

我想執行一些通用代碼並初始化許多類通用的變量。在基類中完成所有這些工作是有意義的。根據創建的數據,然後我想執行一些特定於特定功能的代碼。我覺得這些函數應該在派生於基類的類中。但是,我也希望能夠訪問在基類中初始化的數據。根據其共享基類中代碼的執行情況,創建幾個派生類之一的實例?

事情是這樣的:

class Animal 
{ 
    public Animal() 
    { 
     public int _earCount = 2; 
     // determine if the planet is all water or all land 
    } 
} 

class Dog : Animal 
{ 
    public WagEars() 
    { 
    // for each ear, execute code to wag it 
    } 
} 

class Whale : Animal 
{ 
    public FlipTail() 
    { 
    // code to flip 
    } 
} 

public main() 
{ 
    Animal fred = new Animal; 
    // what code goes here to invoke WagEars if the planet is all land? 
} 

基本上我想要做的是在中間的一些派生類的特定代碼的所有對象執行常見的頁眉/頁腳型代碼。

當fred被創建時,我不知道在公共代碼執行之前它是否是狗或鯨。

+0

創建fred時,無論是狗,還是鯨魚,或者它都不是。如果繼承被用來解決這個問題,那麼在創建時就必須知道一些東西。 –

回答

0

你可能想要的是類似以下內容:

public main() 
{ 
    Dog fred = new Dog(); 
    fred.WagEars(); 
} 

爲了調用子類的方法,你需要聲明的變量的類型是類。

或者,你可以這樣做:

public main() 
{ 
    Animal fred = new Dog(); 
    ((Dog)fred).WagEars(); 
} 

如果向下投的對象爲正確的子類,你將有機會獲得子類的方法。

+0

第二種情況的InvalidCastException,因爲'fred'是**不是**狗。 –

+0

@JonHanna呃,我做了那個有點錯誤。看看我的編輯,並感謝指出。 – jjnguy

0

會這樣嗎?

if(fred is Dog) 
{ 
    ((Dog)fred).WagEars(); 
} 

if(fred is Whale) 
{ 
    ((Whale)fred).FlipTail(); 
} 
相關問題