位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# OOP技術(shù) 繼承

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

    繼承是OOP最重要的特性之一。任何類(lèi)都可以從另一個(gè)類(lèi)繼承,這就是說(shuō),這個(gè)類(lèi)擁有它繼承的類(lèi)的所有成員。在OOP中,被繼承(也稱(chēng)為派生)的類(lèi)稱(chēng)為父類(lèi)(也稱(chēng)為基類(lèi))。注意,C#中的對(duì)象僅能直接派生于一個(gè)基類(lèi),當(dāng)然基類(lèi)也可以有自己的基類(lèi)。

    繼承性可從一個(gè)較一般的基類(lèi)擴(kuò)展或創(chuàng)建更多的特定類(lèi)。例如,考慮一個(gè)代表農(nóng)場(chǎng)家畜的類(lèi)(由80多歲的 資深開(kāi)發(fā)人員MacDonald在他的家畜應(yīng)用程序中使用)。這個(gè)類(lèi)名為Animal,擁有EatFood()或Breed()等方法,我們可以創(chuàng)建一個(gè)派生類(lèi)Cow; Cow支持所有這些方法,也有自己的方法,如Moo()和SupplyMilk()。還可以創(chuàng)建另一個(gè)派生類(lèi)Chicken,該類(lèi)有Quck()和LayEgg()方法。

    在UML中,用箭頭表示繼承,如圖所示。


Animal






+EatFood() +Breed()





I


i

Chicken


Cow




+Cluck()

+LayEgg()


+Moo()

+SupplyMilk()

    在繼承一個(gè)基類(lèi)時(shí),成員的可訪問(wèn)性就成了一個(gè)重要問(wèn)題。派生類(lèi)不能訪問(wèn)基類(lèi)的私有成員,但可以訪問(wèn)其公共成員。不過(guò),派生類(lèi)和外部的代碼都可以訪問(wèn)公共成員。這就是說(shuō),只使用這兩個(gè)級(jí)別的可訪問(wèn)性,不能讓一個(gè)成員可由基類(lèi)和派生類(lèi)訪問(wèn),而不能由外部的代碼訪問(wèn)。

    為解決這個(gè)問(wèn)題,C#提供了第三種可訪問(wèn)性:protected,只有派生類(lèi)才能訪問(wèn)protected成員。對(duì)于外部代碼來(lái)說(shuō),這個(gè)可訪問(wèn)性與私有成員一樣:外部代碼不能訪問(wèn)private成員和protected成員。

    除了定義成員的保護(hù)級(jí)別外,我們還可以為成員定義其繼承行為?;?lèi)的成員可以是虛擬的,也就是說(shuō),成員可以由繼承它的類(lèi)重寫(xiě)。派生類(lèi)可以提供成員的另一種實(shí)現(xiàn)代碼。這種實(shí)現(xiàn)代碼不會(huì)刪除原來(lái)的代碼,仍可以在類(lèi)中訪問(wèn)原來(lái)的代碼,但外部代碼不能訪問(wèn)它們。如果沒(méi)有提供其他實(shí)現(xiàn)方式,通過(guò)派生類(lèi)使用成員的外部代碼就自動(dòng)訪問(wèn)基類(lèi)中成員的實(shí)現(xiàn)代碼。


繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部