我有以下Java类结构。 (JDK 1.6.0_21)
Class C extends B` {
//Nothing relevant
}
Class B extends A {
public void clear() {
// whatever
}
}
Class A {
public void clear() {
// whatever
}
}
我有一个类型为C的对象c。当我打电话给c.clear()
时,它正在调用clear()
类中的A
方法,而不是类B
。经过多次清理和构建之后,它开始在类B
上使用clear方法,这是预期的。
在任何人说“你在改变A,B或C级之后你没有重建”之前。这些课程在3年内没有变化。我甚至添加了调试行来证明它正在调用A.clear()
,这也证明它已被重新编译。
有没有人知道它会调用A.clear()
而不是B.clear()
的任何理由,还记得所有这三个类在几年内都没有变化吗?
编辑:A类和B类是最终放在jar文件中的库的一部分。类C
位于Java应用程序中。这两个项目都在Eclipse中检出,并且在这个问题上多次编译 - 因为我在库中添加了调试并在Java应用程序中进行了调试。
再次编辑:类clear()
中的B
方法不使用super.clear()
,也不应该使用{{1}}。
最终编辑:答案必须是存在某种编译/环境问题 - 如果Java的JDK存在某种影响继承模型的缺陷,那么会有更多的漏洞。在不暴露整个项目的情况下,我认为没有人能做到更多。感谢那些回答的人!
答案 0 :(得分:1)
我甚至添加了调试行来证明它正在调用A.clear(),这也证明它已被重新编译。
不,不。调试器可以使用与部署的代码不同的代码运行。你只会看到错误的行,在最坏的情况下 - 相同的行(如果代码更改没有移动任何东西)
下次确保文件/广告的日期不在过去。