3 回答

TA貢獻1871條經驗 獲得超8個贊
當您需要一個用于繼承和多態性的類時,抽象類很有用,但是實例化該類本身,僅實例化其子類是沒有意義的。當您要為一組共享一些通用實現代碼的子類定義模板時,通常會使用它們,但同時您也要保證不能創建超類的對象。
例如,假設您需要創建“狗”,“貓”,“倉鼠”和“魚”對象。它們具有類似的屬性,例如顏色,大小和支腳數量以及行為,因此您可以創建Animal超類。但是,動物是什么顏色?動物物體有幾條腿?在這種情況下,實例化Animal類型的對象沒有太大意義,而僅實例化其子類。
抽象類在多態性方面還具有額外的好處-允許您將(抽象)超類的類型用作方法參數或返回類型。例如,如果您有一個帶有train()方法的PetOwner類,則可以將其定義為采用Animal類型的對象,例如train(Animal a),而不是為Animal的每個子類型創建一個方法。

TA貢獻1770條經驗 獲得超3個贊
通過使用抽象類,我們可以使類更通用。
例如:如果類A是一個抽象類,并且有類B,類C和類D擴展了抽象類A,則這些子類將繼承一個已經在抽象類A中聲明的方法,從而使該方法更加通用。

TA貢獻1893條經驗 獲得超10個贊
當您在類層次結構中為類定義行為時,請使用抽象類,該行為永遠不會直接用于實例化對象。
因此,暫時將自己視為上帝。您的CBabyBoy和CBanyGirl類不會是抽象的-因為這些都是可以創建的固體對象。另一方面,您的CPerson和CAnimal類將是抽象的-從類型層次結構的角度來看,它們很有用,但您永遠不會運行CAnimal dingbat = new Animal();
- 3 回答
- 0 關注
- 863 瀏覽
添加回答
舉報