zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# 继承

2023-09-14 09:03:15 时间
在继承一个基类时,成员(属性、方法)的可访问性就成了一个重要的问题。派生类不能访问基类的私有成员,但可以访问其公共成员。 只有派生类才能访问基类的protected成员。对于外部代码来说,这个可访问性与私有成员一样:外部代码不能访问private成员和protected成员。 基类的成员可以是虚拟(Virtual)的,也就是说,成员可以由继承它的类重写。派生类可以提供成员的其他实现

在继承一个基类时,成员(属性、方法)的可访问性就成了一个重要的问题。派生类不能访问基类的私有成员,但可以访问其公共成员。

只有派生类才能访问基类的protected成员。对于外部代码来说,这个可访问性与私有成员一样:外部代码不能访问private成员和protected成员。

基类的成员可以是虚拟(Virtual)的,也就是说,成员可以由继承它的类重写。派生类可以提供成员的其他实现代码。这种实现代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问它们。如果没有提供其他实现方式,通过派生类使用成员的外部代码就自动访问基类中成员的实现代码。

虚拟成员不能是私有成员,因为这样会自相矛盾--不能说成员可以由派生类重写,同时派生类又不能访问它。

基类还可以定义为抽象类。抽象类不能直接实例化。要使用抽象类,必须继承这个类,抽象类可以有抽象成员,这些成员在基类中没有实现代码,这些实现代码必须在派生类中提供。

当然,抽象基类可以提供成员的实现代码,这是很常见的。不能实例化抽象类,并不意味着不能在抽象类中封装功能。

最后,类可以是密封(seal)的。密封的类不能用作基类,所以没有派生类。

小注:

       重写(Override):指在继承关系中,在派生类中重写由基类继承来的方法,这时基类和派生类中就有两个同名的方法,系统会根据对象的实际类型调用相应版本的方法。

 


C++中的继承 学习C++中的继承,包括继承的基础知识,加上继承与友元、继承与静态成员、多继承情况等等,了解什么是菱形继承?菱形继承的问题是什么?了解什么是菱形虚拟继承?如何解决数据冗余和二义性的?了解继承和组合的区别?什么时候用继承?什么时候用组合?