今天看文章说到工做中对于接口和抽象类使用是否按照必定标准,仔细想了想,接触的几个项目,都没有按照必定标准使用.框架
网上搜索了一番,关于使用标准各有各的说法,不过大多数人从类能够继承和接口不能够继承,只能够实现方面考虑,即类的继认可为是"is-a",接口认为是"like-a"这么两种形式.对象
有的认为接口是一种相似框架的存在,即实现接口的对象能够没有任何关联,彻底是不一样的类别.继承
好比说猫,狗能够认为是动物,都有叫这样的行为,叫的内容不一样,一个喵喵,一个汪汪,那么能够把叫抽象出来,具体的叫声有子类实现;这样定义为抽象类;再者以飞为例,鸟和飞机均可以飞,可是属于不一样类别,则定义为接口.可是我的认为若是把叫的范围扩大一些,不单单局限于动物,那么是否是就能够定义为接口了;若是把飞范围缩小些,好比大雁、麻雀,那么是否是能够定义为抽象类了。如此说来,定义是接口仍是抽象类,彻底由对象的范围来决定,即由项目中的对象来决定.接口
固然接口须要遵循ISP原则,全称“ISP接口隔离原则”,如下从描述摘自http://baike.baidu.com/item/isp/4807182#viewPageContentit
1.使用多个专门的接口比使用单一的总接口要好基础
2. 一个类对另一个类的依赖性应当是创建在最小的接口上的搜索
3. 一个接口表明一个角色,不该当将不一样的角色都交给一个接口。没有关系的接口合并在一块儿,造成一个臃肿的大接口,这是对角色和接口的污染。方法
简单来讲就是接口要合乎大小,不要胖,不要瘦.项目
实现方法主要如下两种:view
一、使用委托分离接口.
二、使用多重继承分离接口.
这个明天再详细研究.
总而言之,接口和抽象类的使用规则创建在对象基础上,“is-a”、“like-a”是比较容易理解区别的,须要具体问题具体分析.