上篇回顾
里氏替换概念
父类对象装子类对象
作用
方便进行对象存储和管理
使用
is和as
is用于判断
父类是不是指定类型的子类
as用于转换
父类类型转换为子类类型对象
当然父子可以相互转换
今天的标题是继承:构造函数,很多同学肯定有疑问,我们在封装时不是已经学习了构造函数吗?继承后的构造函数有什么不同吗?那首先,我们回顾一下在封装中学习的构造函数。
构造函数
实例化对象时调用的函数
主要用来初始化成员变量
不写返回值
函数名和类名相同
访问修饰符根据需求而定
一般为public
可以重载构造函数
可以用this语法重用代码
可以用this区分同名参数和成员变量
有参构造会顶掉默认的无参构造
如想保留无参构造需重载出来
那么在继承中
构造函数有什么区别呢?
继承中的构造函数特点
当申明一个子类对象时
构造函数的执行顺序
先执行父类的
再执行子类的
父类的无参构造
很重要
子类可以通过
base关键字代表父类
调用父类构造
继承中构造函数执行顺序父类构造
↓↓↓
父类构造
↓↓↓
.......
↓↓↓
子类构造
无论如何,只要申明子类对象,就必须把自己的父类构造函数都走一遍,这个规则非常的重要!
父类的无参构造很重要注意,此处的子类有一个有参构造,当我们申明子类对象时,默认还是调用了父类的无参构造函数。
如果父类
没有了无参构造
注意,由于继承中,申明子对象时程序只会自动的调用父类的无参构造,所以如果父类没有了无参构造,是会报错的。因此父类的无参构造很重要。
在父类中加上无参构造,就不会报错了。为什么我这里的措辞是很重要,而不是必不可少呢?因为我们可以利用base来重定向子类调用父类的哪一个构造函数。
通过base调用父类构造base是一个关键词,它主要用来表示父类,在继承中它的主要用处就是父类构造函数的调用,之后讲了多态它还有更多的用处。
上方代码中,父类是没有无参构造的,我们通过在子类中使用base关键字,含义是当调用子类有参构造时,会通过base调用父类的构造函数,具体调用的是哪一个由你传入的参数决定。
这里的参数 i ,是通过子类构造传递给父类构造的,所以父类和子类打印出来的都是1。
base的使用规则,基本和封装中讲构造函数中的this很像,base代表父类,this代表自己,他们可以一起使用。
总结特点
当申明一个子类对象时
构造函数的执行顺序
先执行父类的
再执行子类的
父类构造
↓↓↓
父类构造
↓↓↓
.......
↓↓↓
子类构造
默认调用
父类无参构造
所以
父类无参构造
很重要
子类可以通过
base关键字代表父类
调用父类构造
base和this
用法相似
关注
唐老湿
获取更多干货内容
end