【发布时间】:2012-04-25 05:23:01
【问题描述】:
所以我遇到了一个类似这样的问题:
package com.blah.A_package;
public class A
{
public void f() {
g();
}
protected void g() {
System.out.println("superclass g()");
}
}
package com.blah.B_package;
public class B extends com.blah.A_package.A
{
protected void g() {
System.out.println("subclass g()");
}
}
public static void main(String[] args)
{
A scratch = new A();
scratch.f();
}
运行时,它会打印出“子类 g()”而不是预期的“超类 g()”。
我们实际上是在创建超类和子类的对象(这是通过 jar 上的反射),将它们粘贴到地图中,然后根据需要将它们拉出,但我们已经通过打印出object.getClass().getName() 并看到我们实际上正在处理超类实例化。
无论如何,当我们运行应用程序时,由于某种原因,它使用的是方法的子类副本而不是超类,尽管对象是超类的实例(即,它甚至不应该知道子类方法) .这是我和我的同事不知道的已知事情吗?我们完全不知道为什么会发生这种情况。
【问题讨论】:
-
你正在让一个类扩展一个包???我以前从未见过!
-
这是完全无法运行的 java。函数返回类型在哪里???
-
你的代码多处错误,请先更正:)
-
一旦你有一个简短但完整的程序,它实际上工作并演示了问题,我相信你。在那之前,我会认为这是一个诊断错误......
-
在另一个包中你不会有一个名为
A的B的子类(不是B的原始超类)吗?
标签: java overriding subclass superclass