首先C#中,类只能继承一个类,但可以实现多个接口.
类和接口是两个概念,刚开始理解不了也不要紧,你理解了什么就用什么,不理解的东西随着你知识的积累,慢慢就会理解了.
关于类和接口概念解释什么的,书上网上都有,再说一遍你也无法理解,给你举个例子,慢慢去消化吧.
1. 我们定义一个"门"的基类,这个类就是描述门的基本特征,如它是一个长方体,它至少需要有一把锁,它的高度至少在2米以上等.
2. 我们现在要定义一个子类,用这个子类来描述一个"防盗门".因为"防盗门",也是"门",所以理所当然要继承"门"这个基类.
那我们现在这个门既然是防盗门,那除了满足门的特征以外,当然还有些区别,比如需要用特殊的钢材,需要两把锁,这些就是子类对于基类有所扩展.
重点来了:但最关键的是,它需要有防盗功能,那么这个防盗功能,我们要加在什么地方呢?
3. 假如我们把防盗功能放到"门"这个基类,但显然有点奇怪,因为门跟防盗功能是两个概念,加在门里面显然不合适,如果我还有一个子类,这个子类用于描述旋转式的玻璃门,这个玻璃门并不需要防盗功能,把防盗功能加到基类里面就明显不对.
4. 假如我们把防盗功能放到"防盗门"子类里面,这样做可以,没有什么不对,但防盗功能是一个规范,就像ISO9001,ISO9002这种质量管理体系一样,是一个约束,因为具备防盗功能的东西并不只是门,我还可以用于电子防盗锁,保险柜等等一切需要防盗的东西上.所以把防盗功能独立出来是最好的选择.
5. 那我们把防盗功能独立出来写一个防盗功能类,这样做可以,但也并非最好的选择,因为防盗的方式多种多样,无论我在防盗类里面写多少种防盗的方法,也许都不够用,还麻烦.而且这样做还有一个问题,就是我一开始说的,C#中只能承继一个类,我继承了门的类,就没有办法再继承防盗类了.
6. 最好的方式,就是把防盗功能写成一个接口,在这个接口里面定义了一个防盗方法,当然这个方法里面并没有实际内容,我只是想让所有需要有防盗功能的类,都要实现一个防盗的方法,具体的防盗方式,各子类根据自己的实际情况去实现具体的内容.
那现在我的"防盗门"子类,继承"门"这个基类,实现"防盗功能"这个接口,就可以完全满足"防盗门"这个要求了.并且"门"这个基类,也可以被其它种类的门所继承,而"防盗功能"这个接口,也可以被其它任何需要防盗功能的类去实现这个功能.