

























习惯先贴代码:
Code
A.Fun()
B.Fun() using 'override'
BB.Fun() using 'new'
~~~~~~~~~~~~~~~~~~`
B.Fun() using 'override'
A.Fun()
A ab = new B(); ab's type is B
But ab is also A
好了,让我们来分析一下吧。
代码的前一部分就是“~~~~~~~~~~”之上,应该没有什么好说的了。
关键就是接下来声明“A ab = new B();”后,如果对父类的虚函数方法在子类中使用了override重写,则执行的是子类中的方法。如果在子类中是使用new来重写父类的方法,则执行的是父类的方法。
在这里,我们可以这样来理解,override就好比一个橡皮擦,当它出现时,直接擦除父类的方法,然后把自己的放在上面。
如果我们在子类中用的是new,则打个比方就是没有那个橡皮擦,该是谁的就是谁的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。