概述
在 Java
的多态中,有个结论可以直接引用:
- 对象类型看
左边
- 静态方法和成员变量看
左边
- 成员方法,编译看
左边
,运行看右边
(子类可能重写) - 如果有多个匹配的方法可以调用,优先调用参数最匹配的一个
调用顺序
现在有这么一段代码
Parent p = new Son();
// do something here....
- 首先看父类中是否存在可以匹配的方法
- 如果父类中不存在,那么编译出错
- 如果父类中存在
- 如果父类中有多个匹配的方法,则寻找最匹配的那个方法,例如
method(Integer a)
和method(Number a)
,如果传入的参数是 Integer(1),则会匹配前面的方法 - 然后还要看子类是否重写这个方法
- 子类没有重写,则直接调用父类中的方法
- 子类重写了,则调用子类中的方法
- 如果父类中有多个匹配的方法,则寻找最匹配的那个方法,例如