[软构笔记]3.4节关于重载和重写的一点疑惑
关于重载:
可见
ua.doStuff(animalRefToHorse);输出的是“animal”,这里虽然参数animalRefToHorse被赋值了一个Horse(),但是在传参数的时候,他还是作为一个Animal变量被识别。
再看
但是这里gm.type();,gm是一个Game对象,但是被赋值了一个game的子类型Cricket对象,gm.type()用的却是子类型的方法,与上一个图的情况截然相反。
仔细查看可见才发现原来这个解释在之前重载的部分有描述了:
于是我们的疑惑就得到了解答,第一个图是重载方法,是根据编译阶段传入的引用数据类型来决定调用的:如下
但是第二个图是重写方法:是在运行时基于对象类型动态分配的。