如何调用正确的重载方法?

时间:2018-08-12 19:21:57

标签: java inheritance

我有一个类 A 和一个子类 B 。类 A 具有调用foo()的方法C.test(this)。在 C 类中,有两种方法:test(A a)test(B b)。每当调用A.foo()时,都会使用方法test(A a)。对我来说这很正常。但是,每当调用B.foo()时,也会使用方法test(A a)而不是test(B b)(这是我想要的)。这让我感到惊讶。

为什么会这样?如何更改代码结构,以便获得所需的行为?

1 个答案:

答案 0 :(得分:0)

我要假设您没有在A#foo中覆盖B。因此,在调用A#foo时,this引用了A,因为该方法在A中运行。要解决此问题,您可以通过创建B并与其父实现相同的实现来覆盖B#foo中的方法。然后this将引用B而不是A,然后将调用C中的正确方法。