多态后,继承的成员又变成什么样了?
|
|
一、成员变量:参考等号左边的父类的数据类型 |
【】开发中不会出现,会出现在面试
?????如何从内存角度理解????? |
【】 【】结果是f.num指向父类3,打印出3
【】如果不考虑多态,建立zi类型变量和对象, 打印num会首先找子类的num,子类找不到再去找父类的num,因为父类num已经被zi继承 |
二、成员函数:编译参考左边父类,运行参考右边子类
【】f变量指向zi对象,调用的是zi对象的函数 |
|
三、静态函数:看左侧引用类型 |
【】非静态方法由对象完成调用,所以依赖对象。 【】静态方法直接绑定在类上,各自进入方法区的静态区。 静态方法不依赖于对象,依赖于引用。什么类型调用我,我就运行那个类型的静态方法。 |
【】静态方法不涉及多态性。对象的多态性,静态方法不需要建立对象,直接用类名调用。 |
|
总结:多态中,父类引用指向子类对象。 只有非静态函数和子类有关,(类型提升限制子类特有函数使用) 成员属性、静态函数都使用父类的。(父类引用指向父类的成员属性和父类的静态函数) |
多态是方法的多态,父类引用只指向子类的方法, 不是属性的多态,也不是静态函数的多态。父类引用还是使用父类的属性和静态函数。 |