首页 > 解决方案 > 如何调用正确的重载方法?

问题描述

我有一个A类和一个子类BA类有一个方法foo()调用C.test(this). 在C类中,有两种方法:test(A a)test(B b)。每当A.foo()调用时,test(A a)都会使用该方法。这对我来说似乎很正常。但是,无论何时B.foo()调用,都会test(A a)使用该方法,而不是test(B b)(这是我想要的)。这让我很吃惊。

为什么会这样?如何更改我的代码结构以获得我想要的行为?

标签: javainheritance

解决方案


我将假设您没有A#fooB. 所以当A#foo被调用时,this指的是A自从方法运行在A. B要解决此问题,您可以通过B#foo使用与其父对象相同的实现 来覆盖该方法。this然后将引用B而不是,并且将调用A正确的方法。C


推荐阅读