遗传多态性问题

时间:2010-12-20 01:30:21

标签: inheritance polymorphism

Person studentA = new Student();

人是基类 学生是人的子类。

为什么有人会使用上面的代码行?你为什么不这样做

Student studentA = new Student();

2 个答案:

答案 0 :(得分:2)

有时您想要更一般意义上的对象。大多数人都了解用户界面,所以这是一个基本的例子:

假设您有一个屏幕,您希望在某种提示之前禁用每个控件,即。用户填写一些初始输入。您的控件可能是文本框,组合框(下拉列表)或按钮。你可以一举参考上述所有内容的方法是将它们视为控件。

您可以编写如下代码:

foreach(Control c in MyForm.Controls)c.Enabled = false;

这是一个例子,但是当你开始编程时,你会发现这是你面向对象存在的一个非常基本的部分。

您可以看到大多数面向对象的基类库使用此技术的地方是I / O - 所有输入和输出库都可用。在最抽象的意义上,您将拥有一个Stream,但是当您查看类层次结构时,您将看到Stream概念的多态变体:文件流,网络流等。读写流实现将分别用“读者”和“作者”完成。做一些基本的编程任务会让你对这个多态的有用程度有一个非常好的感觉。例如,编写从流中读取然后对其进行抽象的代码,以便它可以应用于它所传递的Stream的任何实现。

我总是试图向人们建议的一件事是研究内置库,看看框架设计师和程序员如何有效地使用这样的技术来实现非常实用的日常使用。

答案 1 :(得分:0)

你真的不会这样做。但是如果你有一个Person的矢量,并且想要指定你添加的一些人是学生呢?

你应该读一下继承和多态。你的问题表明你真的没有太多的编程经验。

这是我关闭谷歌的第一个链接。 http://msdn.microsoft.com/en-us/library/27db6csx%28v=vs.80%29.aspx