3 回答

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

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

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
當(dāng)您在類層次結(jié)構(gòu)中為類定義行為時(shí),請使用抽象類,該行為永遠(yuǎn)不會直接用于實(shí)例化對象。
因此,暫時(shí)將自己視為上帝。您的CBabyBoy和CBanyGirl類不會是抽象的-因?yàn)檫@些都是可以創(chuàng)建的固體對象。另一方面,您的CPerson和CAnimal類將是抽象的-從類型層次結(jié)構(gòu)的角度來看,它們很有用,但您永遠(yuǎn)不會運(yùn)行CAnimal dingbat = new Animal();
- 3 回答
- 0 關(guān)注
- 862 瀏覽
添加回答
舉報(bào)