2011-11-26 75 views
3

假設我有這三類:我可以從super超級方法調用重寫的方法嗎?

class Foo { 
    void fn() { 
     System.out.println("fn in Foo"); 
    } 
} 

class Mid extends Foo { 
    void fn() { 
     System.out.println("fn in Mid"); 
    } 
} 

class Bar extends Mid { 
    void fn() { 
     System.out.println("fn in Bar"); 
    } 

    void gn() { 
     Foo f = (Foo) this; 
     f.fn(); 
    } 
} 

public class Trial { 
    public static void main(String[] args) throws Exception { 
     Bar b = new Bar(); 
     b.gn(); 
    } 
} 

是否可以調用Foofn()?我知道我的解決方案gn()不起作用,因爲this指向Bar類型的對象。

+0

這是甚至編譯? – sll

+0

當然!問題是什麼?? –

+0

我忽略了這些方法是私人的 – sll

回答

5

這在Java中是不可能的。您可以使用super,但它始終在類型層次結構中使用直接超類中的方法。

還要注意的是這樣的:

Foo f = (Foo) this; 
f.fn(); 

polymoprhism 的非常清晰通話的虛擬工作:即使fFoo型的,但在運行時f.fn()被分派到Bar.fn()。編譯時類型無關緊要。

相關問題