首页 新闻 会员 周边

A a = new B();的问题

0
悬赏园豆:10 [待解决问题]
    public abstract class 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 Chicken : Bird
    {
        public string type = "Chicken";
        public override void ShowType()
        {
            Console.WriteLine("Type is {0}", type);
        }
    }

当 Bird bird = new Chicken(); 时,

bird.Type是Bird,bird.ShowType输出是"Type is Chicken"

如果把上述代码Chicken Class中ShowType的方法由override改成new,则:

bird.Type是Bird,bird.ShowType输出是"Type is Bird"

为什么是这样?能给个详细的解释吗?网上搜了一些,没咋看明白

牛小花的主页 牛小花 | 初学一级 | 园豆:59
提问于:2012-07-06 16:06
< >
分享
所有回答(3)
0
        public new void ShowType()
        {
            Console.WriteLine("Type is {0}", type);
        }
Chicken Class中ShowType的方法由override改成new
public new??
 
codeyuyu | 园豆:224 (菜鸟二级) | 2012-07-06 16:17

是的

支持(0) 反对(0) 牛小花 | 园豆:59 (初学一级) | 2012-07-06 16:30
0
dudu | 园豆:31007 (高人七级) | 2012-07-06 16:55
0

这个 继承,要明白他们的内存分配情况就好办了。

分析:

new Chicken();

现在成员有:

B_Type  //B的字段

C_Type //C的字段

BC_ShowType  //B的方法被C重写,即只有一个C的方法,BC共同所有

Bird bird = new Chicken();  //类型转换,只有B_Type和BC_ShowType 可以转换,C_Type是不能转的。

对bird的调用,你看看吧 。

Qlin | 园豆:2403 (老鸟四级) | 2012-07-06 17:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册