namespace Inheritance
{
public abstract class Animal
{
public string type="animal";
public abstract void ShowType();
}
public class Bird : Animal
{
public string type = "Bird";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
}
public class TestInheritance
{
public static void Main()
{
Animal animal = new Bird();
Console.WriteLine("Type value is {0}", animal.type);
animal.ShowType();
Console.ReadKey();
}
}
}
程序输出的结果是:
Type value is animal
Type is Bird
为什么同样是将Bird类型赋给Animal,调用animal.ShowType()时用的是Bird的ShowType()方法,而调用animal.type的值却又是Animal里的type值?
调用实例属性、方法,以类型为主,若有 overrider 等或被重写。你的 type 是变量,而非可重载属性。通常外界访问类变量,使用属性,而非直接调用,这对今后的升级、维护都大有益处
Code
public abstract string Type {
get;
}
public abstract void ShowType(Control c);
因为Animal的type变量和Bird的type变量是不同的东西,且成员变量不支持多态性
因此你访问animal.type的时候没有多态性,使用了Animal类的
而调用ShowType方法的时候,因为是在Bird类内部,此时Bird类的type更接近调用的方法,所以使用了"Bird"
仔细看看 <c#第三版> 继承多态 你会发现答案.....
属性无多态??