在派生类中看不到父类的方法
我试图扩展一个类,然后使用基类中的方法,但我看不到它。
我的代码:
class A {
protected void Foo(){}
}
class B : A {}
class C{
void Bar(){
B b = new B();
b.Foo();
}
}
我如何在 C 中使用 b.Foo?
I'm trying to extend a class, then use a method from base class, but i can't see it.
My Code:
class A {
protected void Foo(){}
}
class B : A {}
class C{
void Bar(){
B b = new B();
b.Foo();
}
}
How could i use b.Foo in C?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您只能从后代类中看到受保护的方法。
C
不是从B
继承的,因此根据定义,它看不到其受保护的方法。You can only see
protected
method from the within the descendant classes.C
doesn't inherit fromB
so, by definition, it cannot see its protected methods.您需要使用
public
修饰符来标记Foo
而不是 protected,因为 C 不继承 B;它“使用”B.请参阅此处了解更多信息。
You need to mark
Foo
with thepublic
modifier rather than protected because C does not inherit B; it "uses" B.See here for more information.
使其
公开
。Foo()
仅对A
及其派生类(如“B”)可见。C
不是A
的派生类。Make it
public
.Foo()
will only be visible toA
and its derived classes (like 'B').C
is not a derived class ofA
.您必须将方法
Foo
公开。You must make the method
Foo
public.因为 Foo 是受保护的,所以除了派生类之外,任何其他东西都看不到它。
要公开它,您需要执行以下操作:
其他答案已经涉及到这一点,但没有提到使用 new 关键字来公开具有相同名称但不同可访问性的方法。
Because Foo is protected it's can't be seen to anything except derived classes.
To expose it you need to do:
Other answers have touched on this but none mention the use of the new keyword to expose the method with the same name, but different accessibility.
你不能。 Foo 是类 A 的受保护成员函数,因此只能在类 A 中或从它继承的类中使用。
You can't. Foo is a protected member function of class A, and as such can only be used from within class A, or from within a class that inherits from it.