首页 新闻 搜索 专区 学院

关于多态的一个小疑惑

0
悬赏园豆:15 [已解决问题] 解决于 2008-09-27 18:17

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值?

RyanXM的主页 RyanXM | 初学一级 | 园豆:65
提问于:2008-09-18 09:52
< >
分享
最佳答案
0

调用实例属性、方法,以类型为主,若有 overrider 等或被重写。你的 type 是变量,而非可重载属性。通常外界访问类变量,使用属性,而非直接调用,这对今后的升级、维护都大有益处

Code
public abstract string Type {
get;
}
public abstract void ShowType(Control c);

陛下 | 老鸟四级 |园豆:3938 | 2008-09-18 10:21
其他回答(3)
0

因为Animal的type变量和Bird的type变量是不同的东西,且成员变量不支持多态性

因此你访问animal.type的时候没有多态性,使用了Animal类的

而调用ShowType方法的时候,因为是在Bird类内部,此时Bird类的type更接近调用的方法,所以使用了"Bird"

Gray Zhang | 园豆:17610 (专家六级) | 2008-09-18 10:01
0

仔细看看 <c#第三版> 继承多态  你会发现答案.....

Jared.Nie | 园豆:1940 (小虾三级) | 2008-09-18 15:32
0

属性无多态??

Bēniaǒ | 园豆:692 (小虾三级) | 2008-09-18 16:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册