为什么 objA 无法访问 methodB(),因为它包含对类 B 类型的对象的引用?
Class A
{
public void methodA()
{
.........
}
}
Class B:A
{
public void methodB()
{
..........
}
}
现在
A obj1= new B();
这会引发错误:
obj1.methodB();
为什么? obj1 包含对 B 类型的对象的引用,但它仍然无法访问它的成员函数。
最佳答案
您声明了 A
类型的变量:
A obj1
并且 A
没有名为 methodB
的方法。如果您希望变量的类型为B
,请按如下方式声明:
B obj1= new B();
(这当然意味着您不能在该变量中存储 A
的任何其他实现,只能存储 B
。)
或者,如果您不想更改变量,则需要强制转换变量:
(obj1 as B).methodB();
(如果obj1
曾经包含A
的实现,而不是B
,这当然会失败>.)
基本上,当您声明 A
类型的变量时,编译器会将其维护为 A
类型。在声明后的任何时候都不能保证该变量将包含 B
的实例。我可以包含实现 A
的任何东西的实例。
关于c# - 为什么包含对 B 类型对象的引用的 A 类型引用变量不能访问 B 类的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47924409/