C#视频马上就要完工了,但是脑子里还存在很多疑惑,是时候停下来思考了。
先拿Class来说,视频里讲到的类有 基类,派生类,抽象类,密封类。这么多的类有什么区别,联系呢?
首先
基类(父类):从字面上就可以看出,基类是最初的一个类,并且可以派生出新类。
派生类(子类):基类的子孙类,继承了基类的所有属性和方法,同时也添加了自己的特性。
基类与派生类的关系
任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。举个例子:我们可以定义一个基类“水果”,他可以派生出“苹果”“葡萄”,很明显水果是基类,苹果和葡萄是派生类。同样苹果还可以派生出“红富士”“国光”“元帅”等 ,这时苹果是基类,“红富士”“国光”“元帅”为派生类。
基类与派生类之间的关系可以有如下几种描述:
1. 派生类是基类的具体化
类的层次通常反映了客观世界中某种真实的模型。在这种情况下,不难看出:基类是对若干个派生类的抽象,而派生类是基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型。
2. 派生类是基类定义的延续
先定义一个抽象基类,该基类中有些操作并未实现。然后定义非抽象的派生类,实现抽象基类中定义的操作。例如,虚函数就属此类情况。这时,派生类是抽象的基类的实现,即可看成是基类定义的延续。这也是派生类的一种常用方法。
3. 派生类是基类的组合
在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为的组合。
派生类将其本身与基类区别开来的方法是添加数据成员和成员函数。因此,继承的机制将使得在创建新类时,只需说明新类与已有类的区别,从而大量原有的程序代码都可以复用,所以有人称类是“可复用的软件构件”。
抽象类:
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。现实中有很多抽象类例如 “数学”“科学”他们没有一个具体的概念,不能实例化出对象。
基类与抽象类的关系
抽象类是基类的一种,简单说基类可以分成抽象类和非抽象类.
抽象类的特性:
- 抽象类不能实例化。
- 使用abstract关键字
- 抽象类可以包含抽象方法和抽象访问器。
- 不能用 sealed 修饰符修饰抽象类,即不能被继承
- 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
在类的家族中还有一种很特别的类——密封类,特别之处就是他是一种违逆大方向的一种类。
密封类:顾名思义密封类就是把类密封起来,使其不能与外界联系,它是类的一种,用sealed修饰,不能用作基类和抽象类。
作用:主要用于防止派生,限制扩展性。当在程序中密封了某个类时,其他类不能从该密封类继承;使用密封类可以防止对类型进行自定义。
显然密封类的这种特性与面向对象编程技术的灵活性和可扩展性是相抵触的是,通常不建议使用密封的方法来处理类。
类作为面向对象的基础,在编程中具有举足轻重的地位,这只是对类的简单理解,以后要在实践中不断的积累加深认识。