多态的前提
1、要有继承关系
2、要有方法的重写
其实没有重写也是可以的,但是不重写就没有意义
例如:动物都有吃这个方法,但是每个具体的动物吃的实现不一样,
变现出不同动物的特有属性。
3、要有父类的引用指向子类对象
父类名 变量名 = new 子类名(参数列表);
多态访问成员的特点
1、成员变量
编译看左,运行看左
2、构造方法
创建子类对象的时候,先访问父类中的构造方法,对父类的数据先进行初始化
3、成员方法
编译看左,运行看右。
因为成员方法存在重写,所以访问看右边
4、静态成员方法
编译看左,运行也看左。
由于被static修饰的成员都是与类相关的,这里不是重写,所以运行的时候,
访问的还是左边的。
多态的弊端:
多态无法使用子类特有的方法
解决弊端
使用对象之间转型访问父类中的方法
1、向上转型:
父类名 变量名1 = new 子类名();
2、向下转型
子类名 变量名2 = (子类名)变量名1;``
Markdown将文本转换为 HTML。
向下转型需要注意的一个问题:
要求转型的类与父类引用存在继承关系,并且一开始创建多态的时候,
使用的是该类。