在繼承一個基類時,成員(屬性、方法)的可訪問性就成了一個重要的問題。派生類不能訪問基類的私有成員,但可以訪問其公共成員。
只有派生類才能訪問基類的protected成員。對於外部代碼來說,這個可訪問性與私有成員一樣:外部代碼不能訪問private成員和protected成員。
基類的成員可以是虛擬(Virtual)的,也就是說,成員可以由繼承它的類重寫。派生類可以提供成員的其他實現代碼。這種實現代碼不會刪除原來的代碼,仍可以在類中訪問原來的代碼,但外部代碼不能訪問它們。如果沒有提供其他實現方式,通過派生類使用成員的外部代碼就自動訪問基類中成員的實現代碼。
虛擬成員不能是私有成員,因為這樣會自相矛盾--不能說成員可以由派生類重寫,同時派生類又不能訪問它。
基類還可以定義為抽象類。抽象類不能直接實例化。要使用抽象類,必須繼承這個類,抽象類可以有抽象成員,這些成員在基類中沒有實現代碼,這些實現代碼必須在派生類中提供。
當然,抽象基類可以提供成員的實現代碼,這是很常見的。不能實例化抽象類,並不意味著不能在抽象類中封裝功能。
最後,類可以是密封(seal)的。密封的類不能用作基類,所以沒有派生類。
小注:
重寫(Override):指在繼承關系中,在派生類中重寫由基類繼承來的方法,這時基類和派生類中就有兩個同名的方法,系統會根據對象的實際類型調用相應版本的方法。