2016-12-02 142 views
0

是否可以從父類訪問子類方法?Java:從父類訪問子類方法

public class C1 { 
    public C1(){ 
     System.out.println("Constructor C1"); 
    } 
} 

public class C2 extends C1{ 
    public void m1(){ 
     System.out.println("print from m1"); 
    } 
} 

public class C3 extends C1{ 
    public void m2(){ 
     System.out.println("print from m2"); 
    } 
} 

public class TestMain{ 
    public static void main(String[] args){ 
     C1 c1 = new C1(); 
    } 
} 

反正是有訪問c1.m1()& c1.m2()沒有初始化的子類?

+0

使用'super'?即。在'c2.m1()'中調用'super.m1()'它會自動調用c2的父節點中的'm1()'。 [相關](http://stackoverflow.com/questions/3767365/super-in-java) –

+1

不,你不能。想想這種情況,如果C2和C3定義了一個方法m3(),那麼當你調用'c1.m3()'時應該調用哪個方法? 'C2.m3()'或'C3.m3'? – diufanman

回答

1

不,不存在:c1是參考C1類型的對象的參考。沒有可用於欺騙Java的轉換,因爲它認爲它是C2C3

你會怎麼通常做的就是定義一個abstract功能mSomethingC1實施,在子類的功能,並使用類似

C1 c = new C2();

c.mSomething()會再打電話,多態,子類中的必需函數。

另一種方法是使m1m2static,並讓他們採取C1實例作爲參數。

+0

謝謝@Bathsheba。我正在尋找一些替代品。目的是將這些方法在三個不同的類中進行邏輯分隔,並從同一點調用所有方法。看起來不可行。 :( –

+0

我已經在最後加入了另一種方法。 – Bathsheba

+0

是的,但這並不能解決我的目的!:( –