一、实质(比较官方的回答)
多态是指:当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务,而这一切对于系统A而言是透明的。
二、举例理解
父类:动物类;子类:猫类和狗类;父类的方法cries()被两个子类重写。
现在有一个功能要实现发出某种动物的叫声,动物有很多种,我们只需要要这样写:
public void animalCries(动物 a){
a.cries()
}
在需要动物发声的时候直接调用:
动物 a=new 猫();
animalCries(a);
动物 b=new 狗();
animalCries(b);
就能不用改动原始代码。编译时变量a就被认定为代码中所声明的动物对象,程序在执行的过程中会看动物a这个变量引用的到底是猫对象还是狗对象。动态绑定。
一些需要知道的知识点
1.向上转型:声明的变量类型是父类,变量引用的对象是子类。(看上去是爸爸,仔细一看是儿子)
2.对于引用对象而言,Java编译器会按照它声明时的类型来能处理,运行时Java虚拟机会按照它实际引用的对象来处理。
3.在运行环境中,引用类型里的方法和成员变量的绑定是有规则的:
- 动态绑定:实例方法的绑定(实际看变量引用的对象的类型)
- 静态绑定:静态方法和成员变量(实际看变量声明时的类型)