我正在学习OOP,并对下面的代码究竟发生了什么有疑问.
我有经典的Dog Animal例子.Dog继承Animal.
public class Animal
{
public string Name { get; set; }
public virtual string Speak()
{
return "Animal Speak";
}
public string Hungry()
{
return this.Speak();
}
}
public class Dog : Animal
{
public override string Speak()
{
return "Dog Speak";
}
public string Fetch()
{
return "Fetch";
}
}
Run Code Online (Sandbox Code Playgroud)
这两个问题均基于此任务: Animal a = new Dog();
Animal并将其设置为Dog引用时实际发生了什么.这是否有特定的术语?a.Hungry(),输出是"Dog Speak".如果输出是"Dog Speak",为什么我不能打电话a.Fetch()?这里发生了什么?任何有关特定主题的帮助和进一步阅读将不胜感激.
Dog就像它是一样Animal.(感谢Matt Burland提醒我这是合适的术语.)Animal,正因为如此,你只能编译器访问权限的成员知道一个Animal可以上网,即Speak和Hungry.它不知道Animal是一个Dog,所以它无法调用Fetch.变量需要是类型,Dog以便您能够调用Fetch它.