14.1.1 C#继承概述
现实世界中许多实体之间不是相互孤立的,它们往往具有共同的特征,也存在内存的差别。人们可以采用层次结构来描述这些实体之间的相似之处和不同之处。
上图反映了鱼类的派生关系。最高层的实体往往具有最一般最普遍的特征,越下层的事物越具体,并且下层包含了上层的特征,它们之间的关系是基类与派生类之间的关系。
为了用软件语言对现实世界中的层次结构进行模型化,面向对象的程序设计技术引入了继承的概念。一个类从另一个类派生出来时,派生类从基类那里继承特性。派生类也可以作为其他类的基类。从一个基类派生出来的多层类形成了类的层次结构。
注意:C#中,派生类只能从一个类中继承。这是因为,在C++中,人们在大多数情况下不需要一个从多个类中派生的类。从多个基类中派生一个类,这往往会带来许多问题,从而抵消了这种灵活性带来的优势。
C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。
第十章中提到了一个关于车辆的例子,让我们再回顾一下这个例子,从中获得基类与派生类的感性认识。
程序清单14-1:
using System; class Vehicle //定义汽车类 { int wheels; //公有成员:轮子个数 protected float weight; //保护成员:重量 public Vehicle(){;} public Vehicle(int w,float g){ wheels=w; weight=g; } public void Speak(){ Console.WriteLine("the W vehicle is speaking!"); } }; class Car:Vehicle //定义轿车类:从汽车类中继承 { int passengers; //私有成员:乘客数 public Car(int w,float g,int p):base(w,g) { wheels=w; weight=g; passengers=p; } }
Vehicle作为基类,体现了“汽车”这个实体具有的公共性质:汽车都有轮子和重量。Car类继承了Vehicle的这些性质,并且添加了自身的特性:可以搭载乘客。
C#中的继承符合下列规则:
●继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
●派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。
●构造函数和析构函数不能被继承。除此之外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
●派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。
●类可以定义虚文法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 函数
, 派生类
, 派生
, 类继承
, C#继承的问题
, 一个
, 成员
, 继承类
, 实体
多层派生
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。