C# OOP技術(shù) 繼承
繼承是OOP最重要的特性之一。任何類都可以從另一個類繼承,這就是說,這個類擁有它繼承的類的所有成員。在OOP中,被繼承(也稱為派生)的類稱為父類(也稱為基類)。注意,C#中的對象僅能直接派生于一個基類,當(dāng)然基類也可以有自己的基類。
繼承性可從一個較一般的基類擴(kuò)展或創(chuàng)建更多的特定類。例如,考慮一個代表農(nóng)場家畜的類(由80多歲的 資深開發(fā)人員MacDonald在他的家畜應(yīng)用程序中使用)。這個類名為Animal,擁有EatFood()或Breed()等方法,我們可以創(chuàng)建一個派生類Cow; Cow支持所有這些方法,也有自己的方法,如Moo()和SupplyMilk()。還可以創(chuàng)建另一個派生類Chicken,該類有Quck()和LayEgg()方法。
在UML中,用箭頭表示繼承,如圖所示。
Animal | |||
+EatFood() +Breed() | |||
I | i | ||
Chicken | Cow | ||
+Cluck() +LayEgg() | +Moo() +SupplyMilk() |
在繼承一個基類時,成員的可訪問性就成了一個重要問題。派生類不能訪問基類的私有成員,但可以訪問其公共成員。不過,派生類和外部的代碼都可以訪問公共成員。這就是說,只使用這兩個級別的可訪問性,不能讓一個成員可由基類和派生類訪問,而不能由外部的代碼訪問。
為解決這個問題,C#提供了第三種可訪問性:protected,只有派生類才能訪問protected成員。對于外部代碼來說,這個可訪問性與私有成員一樣:外部代碼不能訪問private成員和protected成員。
除了定義成員的保護(hù)級別外,我們還可以為成員定義其繼承行為?;惖某蓡T可以是虛擬的,也就是說,成員可以由繼承它的類重寫。派生類可以提供成員的另一種實(shí)現(xiàn)代碼。這種實(shí)現(xiàn)代碼不會刪除原來的代碼,仍可以在類中訪問原來的代碼,但外部代碼不能訪問它們。如果沒有提供其他實(shí)現(xiàn)方式,通過派生類使用成員的外部代碼就自動訪問基類中成員的實(shí)現(xiàn)代碼。
點(diǎn)擊加載更多評論>>