在C#中使用继承

jsm*_*ith 2 .net c# inheritance hierarchy

所以我刚接受了面试,他们给了我一份他们希望我事先处理的任务清单.我完成了除了一个以外的所有任务,并且想知道是否有人能够对这个问题有所了解.

问题就是这样的

  1. 创建一个名为Human的类,为类提供一个公共属性HairColor和一个公共方法Talk(),当调用它时,返回"我是一个人".
  2. 创建另一个名为child的类,它继承自Human并覆盖talk方法并返回"我是小孩".
  3. 创建一个覆盖谈话和输出"我是男性"的男女班级.和"我是女性."
  4. 更改子级和人类层次结构以适当地包括男性和女性并输出正确的字符串.

我完成了任务1-3,但是在问题4上被困了.我在过去的继承工作经历中并没有做太多的事情,这个问题对我来说似乎有点模糊.我向雇主解释了这一点,他们看起来还不错,但没有告诉我应该怎么做.它现在一直困扰着我,我想知道它是如何完成的.

Tom*_*m W 5

听起来好像他们打算在本练习中证明你理解简单继承的局限性.在最简单的继承模型中,你无法用继承者所代表的年龄和性别模拟人类.考虑以下:

  • Abstract Class Human通过两个遗传ChildAdult;
  • Abstract Class Human继承者MaleFemale

很明显,在这个模型中,人类不能同时兼顾ChildFemale/或任何其他组合.因此答案是这个简单的模型是不充分的,相反,您应该建议在尽可能使用已建立的模型的同时满足要求的替代实现.

我将重复我经常说的话:

物体不应该试图代表现实.一个好的对象模型只需要解决手头的问题.

我的意思是,应该以解决手头问题的最恰当的方式建立Child/AdultMale/Female排他性关系.这不要紧,如果他们不能代表现实的.在你的位置上,我会尝试提出各种适合不同问题的替代方案,并解释为什么每种方案在这种情况下都是有益的.