继承与派生

继承与派生

继承:在C#中,类可以继承自另一个类。衍生的类(子类)继承父类的方法和数据成员。

子类继承父类,父类派生子类。

父类又叫基类。

子类又叫派生类。

共有成员保留在父类中,子类保留自己的特性。

派生类是由一个且只能是一个基类创建,称为单继承,C#只支持单继承。

派生类是由两个或以上的基类创建的,称为多继承。C#不支持多继承,而是通过“接口”来实现的。

定义派生类

语法:

[存储属性]  [修饰符]  class 派生类名称:基类名称
{
	// 类体
}

存储属性:静态类static。

访问控制修饰符:如果是外置的,修饰符只有public和internal,默认是internal。

基类名称:表示所继承的类。

派生类的可访问性不能高于其基类型。

成员的可访问性决不能高于其包含类型的可访问性。

默认规则

在使用“继承”时,一般遵循以下原则:

(1)如果类A和类B毫不相关,建议不用继承;

(2)若在逻辑上B是A的“一种”(a kind of),可用继承,允许B继承A的功能和属性。

(3)继承的概念在程序世界与现实世界并不完全相同。

更严格的继承规则:

(1)若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性;

(2)若在逻辑上A是B的“一部分”( a part of),则不允许B从A派生,而是要用A和其它东西组合出B。

声明与调用

在创建派生类对象时,调用构造函数的顺序是先调用基类构造函数,再调用派生类的构造函数,已完成为数据成员分配内存空间并进行初始化的工作。

执行步骤:

1.实例化子类对象;

2.先执行基类构造函数;

3.再执行子类构造函数;

4.执行继承自基类的方法。

派生类不能继承直接基类的构造函数,但在声明派生类构造函数时,可以通过base关键字调用直接基类构造函数,并向基类构造函数传递参数。

语法:

public 派生类构造函数名(形参列表) : base(向基类构造函数传递的实参列表)
{
    // 类体
}

​ “base”是C#关键字,表示调用基类的有参构造函数。

​ 传递给基类构造函数的“实参列表”通常包含在派生类构造函数的“形参列表”中。

在派生类的构造函数中,如果没有base关键字,将自动生成一个base代表基类的构造函数,也通过base想基类传递参数,传递参数的类型、个数必须和基类构造函数的参数一致。

派生类的析构函数和基类的析构函数是相同的,析构函数的执行顺序正好与构造函数相反,即先调用派生类的析构函数,然后再调用基类的析构函数。

继承的访问权限

当派生类中的某个派生类对象想要访问基类成员时,可用base关键字来代替基类名。

base的访问格式:

base.基类成员名 // 在派生类中访问基类成员

base[表达式列表] // 访问基类中的索引器

静态方法中不可以使用base和this关键字。

用internal修饰符定义的类或方法,允许在同一个命名空间内被调用或访问。通常当我们希望一个类或方法的有效作用范围限制在一个工程项目内,而不被其他工程项目使用,就将这个类或方法用internal修饰符定义。

C#规定

1.如果派生类的方法和基类方法同名,则基类中的方法将会被隐藏。

2.一般使用关键字new来隐藏,如果不写new关键字,默认处理为隐藏。

3.虽然基类中的同名方法呗隐藏了,但是还是可以通过base关键字来调用。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值