我是Java的新手,我已经阅读了一些有关重写方法的教程,但我看到的一个例子并不像我期望的那样工作.例如,我有代码:
public class A{
public void show(){
System.out.println("A");
}
public void run(){
show();
}
public static void main( String[] arg ) {
new A().run();
}
}
Run Code Online (Sandbox Code Playgroud)
public class B extends A{
@Override
public void show(){
System.out.println("B");
}
}
Run Code Online (Sandbox Code Playgroud)
当我实例化并调用B.run()时,我希望看到"B"输出.但是,我看到了"A".我究竟做错了什么?
编辑:是的,这些类分为两个单独的文件.他们为了简洁而一起展示.
编辑:我不确定B是如何被实例化的,因为它是由使用类加载器的第三方程序完成的.
编辑:有关第三方程序的更多信息.它首先调用A.main(),我最初没有显示(抱歉).我假设我需要制作"new A().run();" 更通用的使用当前类的名称.那可能吗?
该代码将输出B,如果你:
(new B()).run();
Run Code Online (Sandbox Code Playgroud)
无论问题是什么,都不在你引用的代码中.
更新(编辑后)
如果第三方程序正在调用A.main(),则没有任何(合理的)可以执行B此操作A.只要A.main是做new A().run(),这将有实例A,而不是一个实例B.没有"当前的类名"可以使用,或者如果有(取决于你的观点),它A不是B.
您必须以B某种方式调用第三方程序,而不是直接A修改A(例如,B完全删除).你不是要修改A,以使其使用B; 它将它与后代紧密联系起来,使它们之间的分离毫无意义.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |