-
Notifications
You must be signed in to change notification settings - Fork 83
Open
Description
在Day 6:面向对象进阶——多态文中,有一个测试题解析:
拿这里的 aRefB.show(b) 来说好了,aRefB 虽然是 A 类型的引用,但首先会查找 B 对象中的方法 (因为它实际的指向是 B),而引用 b 正好是一个 B 类型 (实质上是 is-a A 类型),所以符合 B 对象中签名为 show(A) 的方法,就输出了 B and A。如果 B 类型中没有符合签名的方法,那么会从父类中查找,继续这个过程直到找到或者报错。
这里 首先会查找 B 对象中的方法 的表述我觉得有点问题,我理解的是首先aRefB是A类型,拥有的方法是:
public String show(D object) { return "A and D"; }
public String show(A object) { return "A and A"; }A aRefB = new B();// 这里的 aRefB 是一个A类型aRefB.show(b)// 这里先调用的是A的show(A),因为查找出 A 类中 符合 show(B) 的方法只有 show(A)aRefB.show(b)运行时 实际 调用的是 B 中的 show(A) , 这一步才用到多态, B类中重写了 A 类的 show(A) 方法
所以aRefB.show(b)对应的是 B 的show(A object)方法
Metadata
Metadata
Assignees
Labels
No labels