gpt4 book ai didi

c# - 基类设置为派生类,无法调用派生类中的方法?

转载 作者:行者123 更新时间:2023-12-01 07:07:05 26 4
gpt4 key购买 nike

这是一个针对不支持多个类继承的语言的一般 OOP 问题(不确定这在这里是否重要,只是想我会详细介绍),例如 Java:

好的,你有你的基类了:

class Base {}

class Derived extends Base
{
SomeMethod(){}
}

Main()
{
Base baseInstance = new Base();
Derived derivedInstance = new Derived();

baseInstance = derivedInstance;

baseInstance.someMethod(); <<<<<< this does not work. why?

}

为什么当你将baseInstance设置为deriveInstance时,是否无法调用Derived类中定义的方法?

既然您将 baseInstance 设置为衍生实例,您是否应该无权访问此方法?

最佳答案

类型化为基类的变量无法假定有关子类的方法。例如,编译器都知道,baseInstance可以保存对 Base 的引用,或发送至SomeOtherClass extends Base 。现在,您可以说在这种情况下编译器可以解决它,但是:不是编译器所做的。编译器的规则很简单:如果您有一个类型为 Base 的变量,你只能使用Base上已知的东西.

如果您想使用特定子类中的专用方法,那么您需要要求编译器执行带有类型检查的强制转换,即

Derived special = (Derived)baseInstance; // I'm using C# syntax here,
special.someMethod(); // but should be similar or identical

关于c# - 基类设置为派生类,无法调用派生类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21601227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com