2010-07-07 155 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

有很多的,一个基类可以访问派生类(取决于编程语言)的成员方法,但通常它被认为是一个设计的气味。

相反,您通常希望基类仅直接访问其自己的成员,并允许派生类重写方法。