其实写这篇文章,我自己的想法也不是多么的靠谱,但是我却想写一下自己的想法,主题当然就是继承。
众所周知的事情就是,C#是不支持多重继承的,一个类只能同时继承一个父类,但是能够同时继承多个接口。那么,我们在规范一个类的时候,是给他写一个Abstract Class作为其父类,还是写一个Interface作为接口,这就要做出权衡。翻书翻资料能找到的抽象类与接口的区别是什么,说起来还真不多。抽象类可以给出一点方法的实现,而接口则不行;抽象类可以定义自己的属性,而接口只能声明静态字段;接口不能写出访问修饰符,最终它们将都是public的,而抽象类随意。
虽然区别已经列举出来了许多,但总起来讲,就是一句话:接口更有利于规范一个类的行为,而抽象类更倾向于规范一个类的属性。
比如说,我要为全世界上所有的人写一个类,那我就最好写一个抽象类,因为人是有很多属性的,比如性别、年龄、名字等等,而接口没办法做这个事情。那么这个类里面要写些什么方法呢,这个就有待考究了,政治书上写着“人类与动物的区别是人类能够制造工具并使用工具”,生物书上写着“人类是能够直立行走的动物”,但是我认为把这些东东放到这个最基本的基类中(这个类直接继承自object,不再考虑什么Animal之类的东西了)并不好,因此从我个人理解的角度上讲,这些东西可以放到接口里面,大不了让某个需要用到的类去继承那个接口就好了。
我想了想,人类共同都有的行为有什么,恩,对了,人都会挂,于是我写了个接口叫做IDieable,里面就一个方法,叫做Die(),然后我让Human去继承了这个接口,代码就成了这个样子:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
后面我想派生出来一个子类,这个类用来描述一个女学生,这该怎么办呢?性别是人类的一个属性,职业对于一个正常人来说也算是一个属性,那么我应该建立一个抽象类“学生”继承自Human然后令“女学生”这个类继承“学生”然后改变它的Sex属性呢,还是建立一个抽象类“女性”继承自Human然后再写一个接口作为“学习”并令“女学生”分别继承“女性”这个抽象类和“学习”这个接口呢?这两者说起来都有理,我分别把它们的代码写了出来:
第一种,虚类型
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
第二种,虚类加接口型
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
缥缈落花街 月圆月缺 望峦山平川 雁返君未还 怆然晚春残 忆天上人间