前提条件:继承 、重写父类方法 、父类引用指向子类对象
-
概念:多态是指父类引用指向子类对象。比如有Animal这个父类,下面有Dog子类,那么创建对象。Animal a =new Dog().
-
多态中成员变量的调用。
-
首先要知道成员变量不涉及覆盖的说法,那么就很简单的知道了,父类调用成员变量,就是父类自己的,无论静态还是非静态的,都跟子类的没有关系。
-
-
多态中成员函数的调用 (基本是子类都覆盖了父类的方法,还有与父类同名字的成员变量,这时候很迷惑)
-
非静态成员函数:编译时看左边,运行时看右边
-
在编译时候:如果左边的父类没有该函数,那么就编译失败。
-
在运行时候:运行的时候是找右边的子类对象中对应的该方法(因为子类覆盖了父类的同名方法)。
简单说:编译看 = 的左边,运行看 = 的右边
-
-
静态成员函数:静态方法其实不涉及多态的。直接用类名调用即可。所以编译和运行都只看左边。
简单说:编译和运行都参考 = 的左边。
-
-
多态的好处:
-
可以提高程序的扩展性,只需要在关注父类基本的通用功能,屏蔽各个子类之间的差异性,易于程序的维护和扩展。
-
多态存在向上转型跟向下转型,当一个子类中有自己特有的方法时候,父类是无法调用到的,多态时候的父类引用指向子类对象时候也是无法之间调用的,但是可以通过向下转型成子类,在来调用,更加灵活。要用子类就转成子类对象,用父类就向上转成父类对象。
-