首先:你要问自己是否明白两个问题
1、什么是构造器
2、override是什么,以及什么时候需要使用override
本人也查看了网上的评论,虽然说的对,但不是一针见血,因为这个问题本身就有错误,下面是个人的理解:
1、构造器可以理解为构造函数,如果我们在写一个类的时候,不写构造函数,系统会默认声明一个没有参数的构造函数
这里就不得不提到函数的重载,重载的意思是函数名相同,对应位置的参数类型不一致,就叫函数的重载
所以当我们重新写构造函数的时候,会因为参数的不同,这时候就发生了构造函数的重载
这里要注意:重载是发生在同一个类中的
2、如果一个类继承了另一个类(类AA继承类A)
这时候,如书上所言,本人也不知道为什么 类AA是不会继承类A的构造函数的
这时候类AA的构造函数中,字段的赋值,继承过来的字段是需要通过base(和父类某个构造函数匹配的参数列表),来赋值相应的字段,子类中如果还有其他字段,就要自己赋值了(这里不考虑类A是默认构造函数的情况)
除去构造函数之外,这里就不得不提出override(重写) 重写出现的目的:就是实现了类的三要素中的多态 而且override的出现地方是子类
场景:父类中 有一个fun()方法,实现的是我叫父亲
子类继承了父类,同时也继承了这个方法,但子类想实现:我叫儿子的目的 但不想另写一个方法
就需要重写这个方法,这时候就需要在子类中fun()前面加上override 并重新实现函数体
而override 加的条件是 父类的函数允许重写 1)父类是(abstract修饰的)抽象类 子类继承父类 则必须重写 2)父类中含有(virtual修饰的)方法
如果父类中的函数没有被表示virtual 子类中是不允许override的
综上所述:
1、书上说构造函数是不允许继承的,何来的override
2、抛去构造函数,哪怕是其他函数,如果没有override发生的条件,同样是不允许override的
|