我有一个类 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)
(这是我想要的)。这让我感到惊讶。
为什么会这样?如何更改代码结构,以便获得所需的行为?
答案 0 :(得分:0)
我要假设您没有在A#foo
中覆盖B
。因此,在调用A#foo
时,this
引用了A
,因为该方法在A
中运行。要解决此问题,您可以通过创建B
并与其父实现相同的实现来覆盖B#foo
中的方法。然后this
将引用B
而不是A
,然后将调用C
中的正确方法。