一、多态简介
二、多态的前提
有继承 有方法重写 有父类引用指向子类对象
ps:方法重写小技巧,直接打字打出父类的方法名,回车就可以(如下图)
三、多态中成员(包括成员变量和成员方法)的访问特点
左边右边指的是main方法第一行:定义时的式子,编译看左边,也就是看父类中有没有所调用的成员,对于成员方法:运行看右边,也就是会输出子类中的内容(如果子类没有该方法,那么由于继承的原因,会输出父类中的对应方法) 对于成员变量:运行看左边,也就是会输出父类中的内容
四、多态的好处与弊端
(只能访问子类与父类共有的方法,也就是被重写的方法)
接下来是多态在编写时的流程
这是一个fu类
首先是一个zi类(pig) 需要继承fu类(animal) 同时,重写父类方法
现在还差第三个条件,这里我们用函数参数传递的形式来实现第三个条件
创建一个操作对象,参数设置为fu类,然后在demo中将zi类对象传入fu类参数,从而实现fu类引用指向zi类对象,这时,在操作类中进行多态分析和操作,如下图
a.eat 调用方法,所以编译看左边,那么animal中存在eat方法,所以编译通过,运行看右边,运行时运行zi类对象,所以运行“猪吃白菜”
五、多态中子类特有方法的访问
当子类有一种独有方法,父类没有,那么就无法调用这个子类的独有方法,解决办法如下
向下转型,将父类引用(或者说父类对象)强转为子类,并用一个子类对象接住,之后利用子类对象对子类中的特有方法进行访问调用