不能在派生类中看到父类'

本文关键字:父类 派生 不能 | 更新日期: 2023-09-27 18:11:18

我试图扩展一个类,然后使用基类的方法,但我看不到它。

My Code:

class A {
    protected void Foo(){}
}
class B : A {}
class C{
    void Bar(){
         B b = new B();
         b.Foo();
    }
}

如何在C中使用b.Foo ?

不能在派生类中看到父类'

你不能。Foo是a类的受保护成员函数,因此只能在a类内部或从它继承的类中使用。

class A 
{
   protected int x() {}
}
class B : A 
{
   void F() 
   {
      A a = new A();  
      B b = new B();  
      a.x();   // Error
      b.x();   // OK
   }
}

您只能在后代类中看到protected方法。

C不继承B,因此,根据定义,它不能看到其受保护的方法。

您需要用public修饰符标记Foo而不是保护,因为C不继承B;它"使用"b

设置为publicFoo()只对A及其派生类(如'B')可见。C不是A的派生类

必须使Foo方法公开。

class A {
    public void Foo() {}
}
class B : A {}
class C {
    void Bar(){
         B b = new B();
         b.Foo(); // Works
    }
}

因为Foo是受保护的,所以它不能被任何东西看到,除了派生类。

你需要这样做:

class A 
{
    protected void Foo(){}
}
class B : A 
{
    public new void Foo()
    {
        base.Foo()
    }
}

其他答案也提到了这一点,但没有人提到使用new关键字来暴露具有相同名称但不同可访问性的方法。