多态: 同一个对象(某一个事务),在不同时刻表现出来的不同状态。
举例:
猫是动物,狗是动物
水(液态,固态,气态)
多态的前提:
1、要有继承关系。
2、要有方法的重写。
其实这里没有重写也是可以的,但是没有重写是没有意义的
动物 d1 = new 猫();
动物 d2 = new 狗();
3、要有父类的引用指向子类对象。
父 f = new 子();
多态访问成员的特点:
1、成员变量
编译看左,运行也看左。
2、构造方法
创建子类对象的时候,访问父类中的构造方法,对父类中的数据进行初始化
3、成员方法
编译看左,运行看右。
4、静态的成员方法
编译看左,运行也看左
(静态是属于类本身的东西,而且我们之前说过,静态的方法子类无法重写,所以访问的还是左边的)
多态的好处:
1、提高了程序的维护性(由继承保证)
2、提高了程序的扩展性(由多态保证)
多态的弊端:
多态无法使用子类中特有的方法
我就想使用子类中特有的方法,怎么实现呢?
1、创建子类对象,调用子类中的方法(不推荐,我们的问题是基于多态之上进行访问,而且这种方式太占内存了)
2、把父类的引用强制转换为子类的引用。(向下转型)
向上转型:
父类的引用指向子类对象。
向下转型:
将父类的引用转成子类的类型。
多态的前提:
1、要有继承关系
2、要有方法的重写
3、要有父类的引用指向子类对象