本节内容很多,视频文件也超过了4M ,所以下载时间大概会长了那么一小点,还请多等下!!
这节课的内容很多,因为单继承的内容就很多了,我又顺便把前面的东西都用上了,算是复习,类这节有的东西都是翻来倒去的讲两三次,目的是希望大家掌握好,这可是重中只重啊!!本节复习内容中不太清楚的麻烦去看下前面相关章节!!
下面我们讲继承,要了解继承我们先得知道为什么需要继承?
假设我们的为新闻系统制作的一个类里面已经具备了数据库连接,初始化,并且有了查询、增、删、改等功能!
那接下来我们肯定要做一些不同的查询、修改等,例如新闻栏目和用户管理这两个相同的是都需要使用到前面我们说的类,但是不同的是他们所要结果又各不相同。怎么办?有两种办法,一是为他们分别创建类,把数据库连接类的东西复制两次,这样做的缺点我想不用多说了吧,那么我们还可以频繁的调用数据库类的成员来达到目的,可这样下来,我们的代码岂不是很臃肿了?知道减肥药为什么那么好卖吗?
郁闷,那怎么办呢?简单,我们用继承来完成,简单形容下继承吧,他呢就是 子类(派生类)拥有 父类(基类)的全部特性,同时又有自己的特色。我想这样说应该还是算明白了吧!
注意:.Net的继承只允许直接从另一个类中继承,不能同时继承多个类,好像说只能有一个老爹(其实这也不绝对,哈哈想下微软真的很有意思,我们还可以使用接口实现多重继承),但是可以多层次的继承,例如可以上有老爹,还有爷爷,下有儿子,孙子。
下面我们看个直观点的东西
我们看上图就会发现,越下层的越具体.那么我们就可以理解为人是所有类的基类(父类),而下面的则都为派生类(子类).事实上我们下面的子类又可以向下延伸.
C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。
二、C#中的继承符合下列规则:
(这个不是我总结的,我去网上粘人家写现成的.呵呵!!)
1、继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object 类作为所有类的基类。
2、派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。
3、构造函数和析构函数不能被继承。除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
4、派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。(这点需要注意的是,如果是属性或者方法同名,但是签名不同,那就不是覆写,而是重载了)
5、类可以定义虚方法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。
6、派生类只能从一个类中继承,可以通过接口实现多重继承。
在子类中我们可以通过base 关键字访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
从静态方法中使用 base 关键字是错误的。
再重温下访问修饰符
访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。类的继承中有四个访问修饰符: public protected internal private。使用这些访问修饰符可指定下列五个可访问性级别: public protected internal internal protected private。
声明的可访问性 意义
public 访问不受限制。
protected 访问仅限于包含类或从包含类派生的类型。
internal 访问仅限于当前项目。
protected internal 访问仅限于从包含类派生的当前项目或类型。
private 访问仅限于包含类型。
下面我们看个例题,还是说人这个话题吧
全部代码见评论!!