博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

天轰穿C# -vs2010 - 04面向对象的编程之继承【原创】

Posted on 2013-01-07 13:35  天轰穿  阅读(373)  评论(0编辑  收藏  举报

小天:你总在说继承,继承到底是什么?

老田:现实世界中的许多实体之间不是相互孤立的,他们往往具有相同的特性,也存在内在的差别。人们可以采用层次结构来描述这些实体之间的相似之处和不同之处。

 

 

         

 

4-24 类的层次结构示意图

 

上图反映了动物这一个大分类的派生关系。最高层的实体往往是具有最一般最普遍的特征,越下层的事物越具体,并且下层包含了上层的基特征,他们之间的关系是基类和派生类之间的关系。

小天:我总结下吧,这个无非就是一般到特殊的关系。

老田:是的,就如上图所表达的,动物是一个类,但是这个中只包含所有动物都具备的基本特征,比如马和鱼都是动物,都有相同的特征和操作。但是又各有特点。于是就把它们都具备的特征分出来做一个类。对于不同的特点则从公共类中继承出一个子类,将自己的特点放在一个专属于自己的子类中。同时这个子类(派生类)就具备了自己的特性和父类(基类)以及祖父类(基类的基类,哈哈)的所有特性。

口头描述就上面这样简单,而为了用软件语言对现实世界中的层次结构进行模型化,面向对象的程序设计技术引入了继承的概念。一个类从另一个类派生出来时,派生类从基类那里继承特性。派生类也可以作其它类的基类。从一个基类派生出来的多层类形成了类的层次结构。我们把现有的类称为基类或父类,把派生出的类称为派生类和子类。在C#中只允许单继承,就是子类有且仅有一个父类,所有这样的继承关系是一对一的。

C#中派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式继承了直接基类的所有成员。

通过使用继承性,我们可以减少代码的重复编写,同时这样也就减少了代码的冗余性。通过编写一次代码,但是被多次调用。通过继承性不仅仅可以将属性传递给子类,还可以将其方法、事件、索引指示器等传递给子类。由于减少了代码的编写,精简了代码,并且其代码位于基类中的一个地方,这样就更有利于我们地程序的调试以及维护。

继承性的语法:

访问修饰符 Class 基类名

{

}

访问修饰符 Class 子类名 : 基类名  

{

}

       看出来了吧,实际上所谓的继承,也就是在子类(派生类)的类名字后面加一个冒号,然后跟上要继承的父类(基类名称)即可。就这么一下,哪怕子类里面啥都不写,我们如果用这个子类实例化一个对象,这个对象也就有了一些东西(父类里面所有的非私有的类成员)。

       小天:嘿嘿,我的子类是空的,父类也是空的。用子类实例的对象还有对象嘛?

       老田:曰,自己回去看Object类就知道了。还以为你这就难住我了,你忘记了C#中所有的类都继承自Object这个始祖类了。在C#中,只要没有显示的申明出继承某个类,那么编译器都假定这个类继承自Object类?

本文章为天轰穿原创作品,转载请注明出处及作者。