所以我有一個看起來類似於這樣一個問題:預期的「超類「)的子類克(」Java的超類實例調用子類的方法,不知道爲什麼
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()」。
我們實際上正在創建超類和子類的對象(這是通過在jar上反射),將它們粘在地圖上,然後在需要時將它們拉出來,但我們通過打印出來進行了驗證object.getClass()。getName()並且看到我們實際上正在處理超類的實例化。
無論如何,當我們運行應用程序時,出於某種原因它使用方法的子類副本而不是超類,儘管該對象是超類的實例化(即,它甚至不應該知道子類的方法)。這是我和我的同事不知道的已知事情嗎?我們完全被困在爲什麼會發生這種情況。
你正在讓一個類擴展一個包?我以前從未見過! – CodeBlue 2012-04-12 19:56:35
這是完全不可運行的java。函數返回類型在哪裏? – ControlAltDel 2012-04-12 19:56:36
你的代碼在很多方面都是錯誤的,請先糾正它們:) – fixmycode 2012-04-12 19:57:21