1、Java中实现多态的步骤
- 要有继承(实现)关系。
- 要有方法重写,不然多态就没有意义。
- 父类引用指向子类对象(is a 的关系)。
2、多态中成员方法的调用
编译看左,运行看右。
- 编译看左:是指编译时看左边的类型有没有这个成员方法。
- 运行看右:是指运行时具体用到的是右边类中的该成员方法。

3、多态中成员变量的调用
多态中,成员变量不涉及重写。
编译看左,运行看左。
- 编译看左:意思是在编译期间会看左边的类型有没有这个成员变量,没有就报错,有就不报错。
- 运行看左:意思是在运行期间使用的是左边的类型中的这个成员变量。
4、多态的好处
- 可维护性:基于继承关系,只需要维护父类代码,提高了代码的复用性,大大降低了维护程序的工作量。
- 可扩展性:把不同的子类对象都当作父类看待,屏蔽了不同子类对象间的差异,做出通用的代码,以适应不同的需求,实现了向后兼容。
5、多态的弊端
不能使用子类特有成员。
当需要使用子类特有功能时,需要进行类型转换。
- 向上转型(自动类型转换):子类型转换成父类型。
Animal animal = new Dog();
- 向下转型(强制类型转换):父类型转换成子类型。
Dog dog = (Dog)animal;
类型转换的注意事项:
- 只能在继承层次内进行转换,否则就会报错(ClassCastException)。
- 将父类对象转换成子类之前,使用instanceof进行检查。
A instanceof B,判断A是不是B类型的实例对象。