不能在派生类中看到父类'
本文关键字:父类 派生 不能 | 更新日期: 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
设置为public
。Foo()
只对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关键字来暴露具有相同名称但不同可访问性的方法。