基类和派生类

时间:2010-07-07 15:19:24

标签: oop

我有一个问题,我有一个基类和另一个派生自基类的类。我们可以在基类中访问派生类。

提前致谢

3 个答案:

答案 0 :(得分: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      
   }

答案 1 :(得分:0)

不,你不能。如果您碰巧知道声明为Base类的对象实际上是派生类,您可以将其强制转换。但是在基类中,您无法访问派生类的成员。

答案 2 :(得分:0)

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

相反,您通常希望基类只能直接访问自己的成员,并允许派生类覆盖方法。