override 和 new 的区别
1.你从基类调用虚函数,就会不同。用override重写,会调用重写后的函数。用new重写,则仍调用基类的函数。
2.new 是“重写”的默认修饰符,若不显式的声明会默认添加new关键字,且会生成警告, 但不影响执行。
3.new和override都是重写基类方法 ,都只能重写 virtual、abstract、override修饰的function(), 不能是静态或非虚方法(因为先天逻辑上就矛盾了)
4.他们都可以实现对基类的隐藏,也都可以使用base来调用基类(直接父类) , 但是有区别:
①使用override来重写时, 基类必须是虚方法(virtual)声明的 , 而 new则不需要
②譬如:父亲和儿子都有钱包(方法), 爸爸的钱包是基类方法, 儿子的是重写方法 ; 儿子的钱包若是new进行重写的, 你调用谁的钱包就是谁的钱包(是分开独立的),若儿子钱包是override重写的, 你调用爸爸的钱包则也会调用到儿子的钱包;如是直接调用儿子钱包,不管是new或者override都不会 涉及到爸爸的钱包
;若要在儿子类当中调用爸爸的钱包 , 则需要用 base关键字来声明:“爸爸我需要钱”.
5.override相当于子类覆盖掉父类的方法 ,除非你显式的非要调用父类方法( base.function()) ; new相当于重新在子类当中写了一个名字一模一样的方法, 两者是不相关的
6.子类实例化会调用父类构造函数 用 :base()