2015-02-10 49 views
0

我有一個接口I1,它定義了一個方法M1。其他兩個類C1C2正在實施I1和over-raides M1如何在Eclipse中找出正確的重寫方法

在另一個類C3我參考M1。現在如何理解M1是指C1_M1還是C2_M1

P.S我可以在調試代碼時找到它。但是我正在尋找一些快捷方式而不執行它。

+0

誰把對象放在那裏? – 2015-02-10 12:13:02

+0

@LuísSoares我只能看到那裏的參考 – saikosen 2015-02-10 12:56:19

回答

1

,如果你以這種方式創建對象

I1 i=new c1(); 

然後i.m1()將調用class c1

如果

I1 i=new c2(); 

然後i.m1()將調用class c2

M1方法M1方法如果y你不知道對象是如何創建的,你只有參考然後說你只能在運行時找到它,因爲它是Run time Polymorphism

2

它是運行時多態,所以你只有在運行時才能理解它。

如果您知道什麼是您的程序的輸入,那麼您可以瞭解哪個類實例參考來了。

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方法將被調用。

總而言之 - 您必須瞭解您的代碼,識別輸入,然後才能瞭解在運行時將調用哪個類。否則調試是最佳實踐。

+0

你是指'B b =(B)o;'而不是'o = new B();'(對於'C'也是一樣的)? – James 2015-02-10 12:21:21

+0

@James Ohhh,是的詹姆斯我編輯了我的代碼,謝謝你指出我的錯誤。 – 2015-02-10 12:23:42

相關問題