Skip to content

多态测试题解析 #6

@umm233

Description

@umm233

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"; }
  1. A aRefB = new B(); // 这里的 aRefB 是一个A类型
  2. aRefB.show(b) // 这里先调用的是A的show(A),因为查找出 A 类中 符合 show(B) 的方法只有 show(A)
  3. aRefB.show(b) 运行时 实际 调用的是 B 中的 show(A) , 这一步才用到多态, B类中重写了 A 类的 show(A) 方法

所以aRefB.show(b)对应的是 B 的show(A object)方法

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions