多态,顾名思义就时有多种形态,那咋样才嫩共有多种形态呢,再java中就是用不同的对象去调用同一个方法,产生了不同的结果。
看这段代码,我调用的是同一个方法,且只是传入的对象的不同,但是产生了不同的结果,这就是多态
多态的执行条件
必须要子类继承了父类
子类要对父类的方法进行重写,要发生向上转型
同过父类调用子类的方法
那什么是重写呢
再子类的父类中有相同的方法,且该方法的放回值,参数,名字相同,且子类的访问权限大于等于父类在调用父类的该方法时,子类的方法会重写父类的方法啊,所以当调用的父类的方法,实际执行的是子类的方法 只有将她的访问权限设置为public 返回类型,参数和她一样才可以成功运行
再发生向上转型后,调用父类的发重写的方法,最终产生不同的效果把这整个过程叫做动态绑定,再编译时不能确定方法的行为,只有再程序运行后才知道,也叫做晚绑定
当然也有静态绑定,这是在用户传参时就能确定调用的是哪个方法,典型就是方法重载
向下转型
在发生向上转型后,我们如果要调用子类的成员是不行的,只能调用父类有的成员
那如果要调用子类的方法,那么就要用到向下转型了
因为向下转型是从小变到大的转换,是有风险,在转换是需要判断能否进行
这里用到一个关键字,instanceof ,用来确认lei这个类否是后面hh的变量,若是表达式为true 否者为false,只有当lei这个类是后面hh的父类是,才能使用向下转型,将lei强转为hh,然后使用一个hh类型的变量tmp去接收,这样就可以同过tmp去调用子类的成员了
END 加油哦