-
1 基础知识
-
2 案例—“采访”升级版

![]()
继承是面向对象程序设计的主要特征之一,它可以使程序员重用代码,节省程序设计的时间。继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起类的新层次。
被继承的类称为父类(或基类),继承的类称为派生类(或子类)。由此可见,继承是对客观世界的直接反映。通过类的继承,能够实现对问题的深入抽象描述,反映出人类认识问题的发展过程。它体现了大自然中特殊与一般的关系。如2012年一夜走红的“江南Style”,那些模仿的舞蹈和鸟叔的“江南Style”之间可以说是一种继承关系,如图6.1所示。鸟叔的“江南Style”中的几个招牌动作和背景音乐体现了骑马舞的一般特征,职员Style和学生Style分别继承了这些特征,并结合了各自特殊的特性。
|
| 图6.1 其他Style与江南Style的继承关系 |
现实世界中的许多实体之间不是相互孤立的,它们往往具有共同的特征,也存在内在的差别。人们可以采用层次结构来描述这些实体之间的相似之处和不同之处,如图6.2所示。
![]() |
| 图6.2 类层次结构图 |
图6.2反映了“车”作为类的派生关系。最高层的实体往往具有最一般最普遍的特征,越靠下层的事物越具体,并且下层包含了上层的特征。它们之间的关系是基类与派生类之间的关系。派生类也可以作为其他类的基类。从一个基类派生出来的多层类形成了类的层次结构。
![]()
如果要声明一个类派生于另一个类,可以使用如下语法:
[修饰符]class 派生类名:基类名
{
//类体
}
其中,修饰符可选用public、private、protected、internal、abstract、sealed或new等;基类名为被派生类继承的基类名称。
![]()
(1)基类中除了构造函数和析构函数不能被继承外,其他所有成员无论定义了何种访问控制方式,都能被继承到派生类中。
(2)基类中的public成员和protected成员在派生类中可以被直接访问,但是基类中的private成员在派生类中不能被直接访问。
(3)派生类除了从基类继承成员之外,还可以新增自己的成员。
(4)基类或基类对象实例均不能访问派生类自己新增的成员。
(5)继承是可传递的,如果A类派生了B类,B类又派生了C类,则C类不仅继承了B类中声明的成员,同样也继承了A类中的成员。
(6)如果一个类在定义时不使用冒号来显式地从另一个类派生它自己,那么默认该类从Object类派生。所有C#类都直接或间接地从Object类中派生。
(7)C#继承的方法称为单一继承,这意味着派生类只能有一个父类。一些面向对象的语言允许一个类有多个父类,这种继承称为多重继承。C#语言不支持多重继承,而使用接口来提供多重继承的特性。
头脑风暴:
1.如果将鸟叔的“江南Style”定义成一个基类,那么基类的属性和方法有哪些?
2.“贪吃蛇”游戏中食物和障碍物之间可不可以是继承关系?
3.画出电话、移动电话、手机、智能手机和各种品牌的智能手机之间的继承关系。






