【唐老狮】C#——继承:构造函数

上篇回顾

里氏替换概念

父类对象装子类对象

作用

方便进行对象存储和管理

使用

is和as

is用于判断

父类是不是指定类型的子类

as用于转换

父类类型转换为子类类型对象

当然父子可以相互转换

今天的标题是继承:构造函数,很多同学肯定有疑问,我们在封装时不是已经学习了构造函数吗?继承后的构造函数有什么不同吗?那首先,我们回顾一下在封装中学习的构造函数。

构造函数

实例化对象时调用的函数

主要用来初始化成员变量

不写返回值

函数名和类名相同

访问修饰符根据需求而定

一般为public

可以重载构造函数

可以用this语法重用代码

可以用this区分同名参数和成员变量

有参构造会顶掉默认的无参构造

如想保留无参构造需重载出来

那么在继承中

构造函数有什么区别呢?

【继承中的构造函数】
 

特点

当声明一个子类对象时

构造函数的执行顺序

先执行父类的

再执行子类的

父类的无参构造

很重要

子类可以通过

base关键字代表父类

调用父类构造

【继承中构造函数执行顺序】

父类构造

↓↓↓

父类构造

↓↓↓

.......

↓↓↓

子类构造

无论如何,只要声明子类对象,就必须把自己的父类构造函数都走一遍,这个规则非常的重要!

【父类的无参构造很重要】

注意,此处的子类有一个有参构造,当我们声明子类对象时,默认还是调用了父类的无参构造函数。

如果父类

没有了无参构造

注意,由于继承中,声明子对象时程序只会自动的调用父类的无参构造,所以如果父类没有了无参构造,是会报错的。因此父类的无参构造很重要。

在父类中加上无参构造,就不会报错了。为什么我这里的措辞是很重要,而不是必不可少呢?因为我们可以利用base来重定向子类调用父类的哪一个构造函数。

【通过base调用父类构造】

base是一个关键词,它主要用来表示父类,在继承中它的主要用处就是父类构造函数的调用,之后讲了多态它还有更多的用处。

上方代码中,父类是没有无参构造的,我们通过在子类中使用base关键字,含义是当调用子类有参构造时,会通过base调用父类的构造函数,具体调用的是哪一个由你传入的参数决定。

这里的参数 i ,是通过子类构造传递给父类构造的,所以父类和子类打印出来的都是1。

base的使用规则,基本和封装中讲构造函数中的this很像,base代表父类,this代表自己,它们可以一起使用。

【总结】
 

特点

当声明一个子类对象时

构造函数的执行顺序

先执行父类的

再执行子类的

父类构造

↓↓↓

父类构造

↓↓↓

.......

↓↓↓

子类构造

默认调用

父类无参构造

所以

父类无参构造

很重要

子类可以通过

base关键字代表父类

调用父类构造

base和this

用法相似


经验分享 程序员 微信小程序 职场和发展