1、多态:Java程序中一个类或多个类中定义多个同名方法,该多个同名方法完成操作不同;
2、多态表现形式
-
静态多态(编译时多态):通过方法重载实现
-
动态多态(运行时多态):通过方法重写(覆盖)实现
3、方法重载与方法重写(覆盖)
对于重载方法,Java编译时系统根据传递给方法的参数个数、类型决定调用哪个方法;
对于覆盖方法,Java运行时系统根据实例类型决定调用哪个方法;
4、方法绑定
1)方法绑定:一个方法的调用与方法所在的类(方法主体)关联起来
-
静态绑定(前期、编译时绑定):在程序执行前方法已经被绑定
-
动态绑定(后期、运行时绑定):在运行时根据引用对象的类型进行绑定
final,static,private和构造方法是静态绑定,其余都是动态绑定
2)动态绑定过程:
-
虚拟机提取对象的实际类型的方法表;
-
虚拟机搜索方法签名;
-
调用方法;
与方法不同,在处理java类中的成员变量(实例变量和类变量)时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型时,对象的方法可以找到子类,而对象的属性(成员变量)还是父类的属性(子类对父类成员变量的隐藏)
如果想调用子类的成员变量name,最简单的办法是将该成员变量封装成方法getter形式
4、总结
1)多态是方法的多态,不是属性的多态(多态与属性无关);
2)多态存在要有3个必要条件:继承、方法重写、父类引用指向子类对象;
3)父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了;