我有一個接口I1
,它定義了一個方法M1
。其他兩個類C1
和C2
正在實施I1
和over-raides M1
。如何在Eclipse中找出正確的重寫方法
在另一個類C3
我參考M1
。現在如何理解M1
是指C1_M1
還是C2_M1
?
P.S
我可以在調試代碼時找到它。但是我正在尋找一些快捷方式而不執行它。
我有一個接口I1
,它定義了一個方法M1
。其他兩個類C1
和C2
正在實施I1
和over-raides M1
。如何在Eclipse中找出正確的重寫方法
在另一個類C3
我參考M1
。現在如何理解M1
是指C1_M1
還是C2_M1
?
P.S
我可以在調試代碼時找到它。但是我正在尋找一些快捷方式而不執行它。
,如果你以這種方式創建對象
I1 i=new c1();
然後i.m1()
將調用class c1
如果
I1 i=new c2();
然後i.m1()
將調用class c2
M1方法M1方法如果y你不知道對象是如何創建的,你只有參考然後說你只能在運行時找到它,因爲它是Run time Polymorphism
它是運行時多態,所以你只有在運行時才能理解它。
如果您知道什麼是您的程序的輸入,那麼您可以瞭解哪個類實例參考來了。
interface A{
}
class B implements A{
}
class C implements A{
}
class Main{
public static void main(String args[]){
// input
Object o = new B(); // just assume your logic give you object B.
if(o instanceof B){
B b = (B) o;
// invoke methods
}else if(o instanceof C){
C c = (C) o;
// invoke methods
}
}
}
在上面的代碼中,你能夠明白,類B
方法將被調用。
總而言之 - 您必須瞭解您的代碼,識別輸入,然後才能瞭解在運行時將調用哪個類。否則調試是最佳實踐。
你是指'B b =(B)o;'而不是'o = new B();'(對於'C'也是一樣的)? – James 2015-02-10 12:21:21
@James Ohhh,是的詹姆斯我編輯了我的代碼,謝謝你指出我的錯誤。 – 2015-02-10 12:23:42
誰把對象放在那裏? – 2015-02-10 12:13:02
@LuísSoares我只能看到那裏的參考 – saikosen 2015-02-10 12:56:19