问一道关于OO的题目???

qingYun1029 2011-04-27 09:49:15

public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("Animal always eat.");
}
}


public class Bird : Animal
{
private string type = "bird";

public override void ShowType()
{
Console.WriteLine("Type is {0}.", type);
}

private string color;
public string Color
{
get { return color; }
set { color = value; }
}
}

public class Chicken : Bird
{
private string type = "chicken";

public void ShowColor()
{
Console.WriteLine("color is {0}.", Color);
}
}


class Program
{
static void Main(string[] args)
{
Chicken chicken = new Chicken();
chicken.ShowType();

Console.ReadKey();
}
}


请问输出的是什么???
麻烦说说原因????
...全文
176 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qingyun1029 的回复:]
引用 5 楼 caozhy 的回复:

看错了。。。
Type is bird.

但是,这只能说你程序写的烂。


这么说我不满意了。
第一:做人要输得起,不管你是看错了,还是怎么样。你应该负这个责任。
第二:我的题目是“问一道……”,很显然,程序不是我写的。。
第三:我觉得你不应该说这个程序写得“烂”,这道题目肯定关系到设计,设计旨在表达一种思想,是设计者的思路,你明白别……
[/Quote]
呵呵,是我无知了,请你指出是什么思想和思路?
IT修补匠 2011-04-28
  • 打赏
  • 举报
回复
Type is bird

Chicken 类里面没有ShowType所以在它的父类中寻找。

所以 调用的是bird类的ShowType方法。








xrongzhen 2011-04-28
  • 打赏
  • 举报
回复
这也是个值得深思的问题

不过一般这种题都是陷阱 呵呵 一不小心就会犯错
qingYun1029 2011-04-28
  • 打赏
  • 举报
回复
请帮忙回复一下这个帖子,这个帖子的分数都给你!!
http://topic.csdn.net/u/20110427/21/8f5630b5-da0d-42e6-9d1c-4a3257eb30e2.html
Icedmilk 2011-04-28
  • 打赏
  • 举报
回复
Bird类重写了Animal类的ShowType方法
而Chicken类继承了Bird类的ShowType

一个是重写,一个是继承
qingYun1029 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 caozhy 的回复:]

看错了。。。
Type is bird.

但是,这只能说你程序写的烂。
[/Quote]

这么说我不满意了。
第一:做人要输得起,不管你是看错了,还是怎么样。你应该负这个责任。
第二:我的题目是“问一道……”,很显然,程序不是我写的。。
第三:我觉得你不应该说这个程序写得“烂”,这道题目肯定关系到设计,设计旨在表达一种思想,是设计者的思路,你明白别人为什么要这么写么???
kingdom_0 2011-04-28
  • 打赏
  • 举报
回复
Type is bird.
chicken.ShowType();中的chicken没有实现ShowType方法,调用Bird方法重写的ShowType方法。
qingYun1029 2011-04-28
  • 打赏
  • 举报
回复
谢谢你的提醒!

“一个有陷阱的程序就是很烂的程序,不应该成为前进的方向。”
我需要指出这句话的两点错误:
一:欲加之罪——写错误代码不是我的前进方向。
二:需要搞清楚的是陷阱的造成是多方面的,或者说是多方向性的,所谓条条大路通罗马,小弟借用一下——“种种原因出错误!”随便列举种种错误中的一两种:
1、不小心错了,没有原因,错了就是错了,像哥们你一样可以看错了,那么这儿也可以写错了。
2、故意出错,留陷阱,能够出这个错误时要有条件的,你必须懂这方面的知识,这个出错旨在“教育”,很不幸,小弟没有机会接受“图灵奖获得者或者美国科学院的大牛”们的教育,只能在市面上淘淘书本,相信哥们你一定很不屑,因为哥们你因为“一个有陷阱的程序就是很烂的程序”!!!

相信你还会看到这个回复——麻烦帮忙找找有没有错字!

方便抓抓小辫子,找找说辞!我理解!!!
threenewbee 2011-04-28
  • 打赏
  • 举报
回复
3F可以忽略。

4F你已经说出了问题的本质。

一个有陷阱的程序就是很烂的程序,不应该成为前进的方向。

的确我不懂什么OO,也没有什么能耐,但是也许你的同事,你的客户也有可能是菜鸟,菜鸟的特点和我一样,水平很低,理由很多,而且从来不觉得菜是自己的问题。一个伟大的软件,就是对我们这些菜鸟来说最简单的软件,一段优雅的代码就是让傻子都能一眼看懂的代码。当然了,也可能我见识比较短,lz的同事都是图灵奖获得者或者美国科学院的大牛。他们除了创造卓越的代码以外,也喜欢在各种语言的Hack中寻找乐趣,那另当别论了。

另外哦,我是菜鸟,不敢妄加对你自认为正确的前进的方向多评论什么,但是呢,还是要提醒你,不要着急。无论说话,还是写程序,慢慢来,你看你错别字是不是有点多。
qingYun1029 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 caozhy 的回复:]

引用 11 楼 qingyun1029 的回复:
引用 5 楼 caozhy 的回复:

看错了。。。
Type is bird.

但是,这只能说你程序写的烂。


这么说我不满意了。
第一:做人要输得起,不管你是看错了,还是怎么样。你应该负这个责任。
第二:我的题目是“问一道……”,很显然,程序不是我写的。。
第三:我觉得你不应该说这个程序写得“烂”,这道题目肯定关系……
[/Quote]

或许你觉得我在3F的话对你太物理了,如果是这样的话,那我只能说不好意思了。。
其实我4F的留言就表明了我的想法!!!
qingYun1029 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 caozhy 的回复:]

引用 11 楼 qingyun1029 的回复:
引用 5 楼 caozhy 的回复:

看错了。。。
Type is bird.

但是,这只能说你程序写的烂。


这么说我不满意了。
第一:做人要输得起,不管你是看错了,还是怎么样。你应该负这个责任。
第二:我的题目是“问一道……”,很显然,程序不是我写的。。
第三:我觉得你不应该说这个程序写得“烂”,这道题目肯定关系……
[/Quote]

讲的是集成方面的(后面是讨论继承还是聚合类的问题),原本代码中chicken类是重写了ShowType()方法的。。。
是我好奇,于是将chicken类中的ShowTyup()方法去掉然后把题目拿过来!!!

看你这语气我想也没有必要说什么了。。

我只是菜鸟一只,或许你根本就不屑我的回答。。

不过没关系,我只是朝我认为正确的方向走!!!
CShareMySide 2011-04-27
  • 打赏
  • 举报
回复
这主要是考继承、覆盖和类的加载顺序
Cylan 2011-04-27
  • 打赏
  • 举报
回复
2个类得type变量不一样呢.
实际输出为Chicken类的基类Bird类ShowType()方法.

public override void ShowType()
{
base.ShowType();
}

如果要输出Type is chicken。

using System;
public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("Animal always eat.");
}
}


public class Bird : Animal
{
protected string type = "bird";

public override void ShowType()
{
Console.WriteLine("Type is {0}.", type);
}

private string color;
public string Color
{
get { return color; }
set { color = value; }
}
}

public class Chicken : Bird
{
public Chicken()
{
this.type = "chicken";
}

public void ShowColor()
{
Console.WriteLine("color is {0}.", Color);
}
}


class Program
{
static void Main(string[] args)
{
Chicken chicken = new Chicken();
chicken.ShowType();

Console.ReadKey();
}
}


javatemptation 2011-04-27
  • 打赏
  • 举报
回复
Type is bird.

寻找ShowType()方法,一路找到Bird类中的ShowType()方法,因为Chicken类继承自Bird类且没有重写这个方法。
xu56180825 2011-04-27
  • 打赏
  • 举报
回复
Type is bird
貌似不能覆盖字段的
threenewbee 2011-04-27
  • 打赏
  • 举报
回复
看错了。。。
Type is bird.

但是,这只能说你程序写的烂。
qingYun1029 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]
Type is chicken。
[/Quote]

我想大家应该讨论下,为什么这类看似简单的问题都会出错,是对OO的理解不够深么???
自学成才的这位哥们应该都没怎么看题目吧!
嘿嘿,掉陷阱了吧!!!
qingYun1029 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]
Type is chicken。
[/Quote]

恭喜你答错啦!
看你星星那么多,叫我……
qingYun1029 2011-04-27
  • 打赏
  • 举报
回复
先发一通牢骚,我晕啊,因为网速太慢的原因,点击提交后半天没有动静,于是又点击了一边提交,害我发了两个一模一样的帖子!!!

CSDN这个问题没法该吗???
threenewbee 2011-04-27
  • 打赏
  • 举报
回复
Type is chicken。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧