我总是认为我知道多态性,直到我见到下面的例子。
我有两个班,父亲和儿子。代码如下:
父亲:
public class Father
{
public String name = "father";
public virtual void dosth()
{
Console.WriteLine(name);
}
}
子:
public class Son : Father
{
public String name = "son";
public override void dosth()
{
Console.WriteLine(name);
}
}
我打电话给他们:
static void Main(string[] args)
{
Father p = new Son();
Console.WriteLine(p.GetType()); //print son
p.dosth(); //print son
Console.WriteLine(p.name); //print father
}
我认为,变量p指向一个子对象,所以首先,控制台将打印" Son"类型。我是对的。
然后p.dosth()
会打电话给儿子dosth()
,所以它会打印儿子"。我又回来了。
最后,p.name
也应该是#34;儿子"。但是,这一次,我错了。它打印"父亲"。
我无法理解p变量的类型是儿子,为什么它仍然使用父亲的成员?