一.
下面讲述多态出现以后,继承体系中所涉及的成员的一些特点。
想要讨论多态,没有继承是不行的。
不写构造函数,是因为构造函数是固定在静态中,是子类的实现过程?
成员函数是非静态的。
接下来就对这个三个进行介绍。
接下来的讲解中,只介绍特殊情况,非特殊情况没有特点。
只要一说多态,就出现父类引用指向子类对象。
二. 成员变量
这运行的结果是3,之前我一直在犹豫到底是3还是4?有一点是毋庸置疑的,就是肯定只有一个子类对象,但是父类中的一些数据是附着在子类对象中的,就像这里的父类的int num=3,这个成员变量也是存在于子类对象中。一定要牢记,所有的所有都有前提,这里的前提就是继承,从第一句开始,就是子类开始继承父类,一切和父类相关的东西都开始附着于子类中。
Fu f=new Zi(); 这里是子类对象强制提升为父类,那么接下来的输出f.num,输出的当然是父类的num。
覆盖只发生在函数上,和成员变量没关系,所以不存在4覆盖3。
如果父类中没有num,那么会有输出么?没有,因为虽然本质是子类对象,子类对象中也有num,但是那是子类对象的num,这里是在调用父类的num。DOS会直接报错。
猫有九条命,但是猫变成动物之后,动物有九条命么?没有的,动物是为了扩展,泛指很多种类的,不存在九条命这一说法。
如果换一种写法,需要小心。这里子类中虽然没有num,但是由于继承的关系,它里面就有了父类的num。但是这里讲述的是多态,所以这个写法仅作了解。
为什么这个成员变量这一块是作为了解呢?就是因为实际中使用是不一样的,不会出现子父类中都有num,不合适。
开发的时候,父类都有这个属性,子类干嘛还要重新设定,直接继承过来就可以的。只有面试的时候才会使用。