| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:[求助]有个问题
只看楼主 加入收藏
wsq1168
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-8-24
收藏
 问题点数:0 回复次数:4 
[求助]有个问题

class Animal
{
public virtual void FoodHabits()
{
Console.WriteLine("动物有各种不同的饮食习惯");
}
}
class Carnivorous : Animal
{
public override void FoodHabits()//重写,重写后还是虚方法
{
Console.WriteLine("肉食动物只吃肉");
}
}
class Herbivorouos : Animal
{
public new void FoodHabits()//覆盖
{
Console.WriteLine("食草动物只吃草");
}
}
class Tiger : Carnivorous
{
public override void FoodHabits()//重写
{
Console.WriteLine("老虎不吃人");
}
}

Animal an = new Animal();
an.FoodHabits();
Carnivorous ca = new Carnivorous();
ca.FoodHabits();
Herbivorouos he = new Herbivorouos();
he.FoodHabits();

Animal an2 = new Carnivorous();//基类的指针可以指向任何一个子类的对象
an2.FoodHabits();
Animal an3 = new Herbivorouos();
an3.FoodHabits();
Animal an4 = new Tiger();
an4.FoodHabits();

为什么Carnivorous ca = new Carnivorous();
ca.FoodHabits();
和Animal an3 = new Herbivorouos();
an3.FoodHabits();
显示的结果不一样

搜索更多相关主题的帖子: 饮食 public 动物 
2007-09-18 19:41
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
收藏
得分:0 
这两个是不同的对象的实例,当然不一样了

你想问的好像不是这两个吧

jorden008@
2007-09-18 20:45
wsq1168
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-8-24
收藏
得分:0 
回复:(wsq1168)[求助]有个问题
Herbivorouos he = new Herbivorouos();
he.FoodHabits();

Animal an3 = new Herbivorouos();
an3.FoodHabits();
这两个为什么不一样
2007-09-18 20:55
jasonxie
Rank: 1
等 级:新手上路
威 望:2
帖 子:225
专家分:0
注 册:2007-3-19
收藏
得分:0 
class Herbivorouos : Animal
{
public new void FoodHabits()//覆盖 //这里应该写隐藏,不是覆盖吧,覆盖就是重写了
{
Console.WriteLine("食草动物只吃草");
}
}
这是因为你这个Herbivorouos类是继承于Animal类的,所以FoodHabits()方法也是继承了的。如果直接调用继承的方法,那么将基类的方法隐藏,因此会有一个警告。new关键字是用来避免警告的,这样只消除了警告,但是隐藏仍然会发生。所以会出现结果不一致吧~~要解决这个问题只有重写方法。

你是我心内的一首歌,不要只是个过客;在我生命留下一首歌,无论结局会如何.
2007-09-18 20:58
jasonxie
Rank: 1
等 级:新手上路
威 望:2
帖 子:225
专家分:0
注 册:2007-3-19
收藏
得分:0 
还有,尽管隐藏了基类的方法,但是仍然可以通过基类访问它,所以结果是不一样的~~

你是我心内的一首歌,不要只是个过客;在我生命留下一首歌,无论结局会如何.
2007-09-18 21:19
快速回复:[求助]有个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025076 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved