2010-07-07 154 views
0

我有一個問題,我有一個基類和從基類派生的另一個類。我們可以訪問基類中的派生類嗎?基類和派生類

在此先感謝

+2

你正在試圖做什麼 - 這聞起來像你的設計可能需要看? – Paddy 2010-07-07 15:23:23

+1

如果您告訴我們您正在使用哪種編程語言,以及您正在嘗試完成什麼,那麼您將得到更有幫助的答案。 – 2010-07-07 15:26:58

回答

0

不,你不能。如果你碰巧知道一個聲明爲Base類的對象實際上是派生類,那麼你可以施放它。但是在基類中,你不能訪問派生類的成員。

2

您可以從基類代碼訪問派生類中的代碼,但只能從實際上是派生類對象的對象中訪問代碼,並且只有在涉及的方法是虛方法時纔可以。

如果您有一個本身就是基類實例的對象,那麼在該實例中您無法從基類中看到派生類代碼。

例如

public class Baseclass 
    { 
     public void Foo() 
     { 
      Bar(); 
     } 
     public virtual void Bar() 
     { 
     print("I'm a BaseClass"); 
     } 
    } 
    public classs Derived: BaseClass 
    { 
     public override void Bar() 
     { 
     print("I'm a Derived Class"); 
     } 
    } 


    Main() 
    { 
     var b = new BaseClass(); 
     x.Foo() // prints "I'm a BaseClass" 
     // This Foo() calls Bar() in base class 

     var d = new Derived(); 
     d.Foo() // prints "I'm a Derived Class" 
     // in above, the code for Foo() (in BaseClass) 
     // is accessing Bar() in derived class  
    } 
0

有很多的,一個基類可以訪問派生類(取決於編程語言)的成員方法,但通常它被認爲是一個設計的氣味。

相反,您通常希望基類僅直接訪問其自己的成員,並允許派生類重寫方法。