Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1528619
  • 博文数量: 164
  • 博客积分: 2993
  • 博客等级: 少校
  • 技术积分: 1718
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-24 11:42
文章分类

全部博文(164)

文章存档

2014年(1)

2013年(36)

2012年(90)

2011年(37)

分类: 项目管理

2012-04-24 10:34:05

1、首先不要想接口与抽象类的区别,而要采用逆向思维,即是什么原因导致了他们的区别。

2、接口和抽象类的使用场景不同,也就是说,接口和抽象类是针对不同的使用场景而设计的。我们站在接口和抽象类的设计者的角度来看待这个问题。

3、接口的使用场景是:完全抽象,仅仅声明特征(能完成某些任务),不给出任何实现。

     抽象类的使用场景是:部分抽象,给出部分实现。

4、接口的使用场景是:接口代表了子类能做什么,是 Can-Do关系,

     抽象类的使用场景是:抽象类代表了子类是什么,是 IsA关系。

     因为子类只能是一个实体,但可以做多件事。所以,接口可以多继承,抽象类单继承。

5、接口:接口代表了子类的次要功能,因此可以多继承,重构的时候特别有用,提取出一部分公有的而不影响。

     抽象类:抽象类代表了子类的主要功能,因此单继承。

     因为:根据常识,一个类肯定是具备一个主要功能,多个次要功能。

6、既然接口和抽象类都是表现抽象,抽象的东西当然不能实例化。

7、接口:完全抽象,因此必须实现全部的方法(这个很好理解,既然你说能完成某些任务,当然要给出是如何完成这些任务的)。为了避免子类继承不需要的方法,即接口污染,要把具备多功能的大接口分解成单功能的小接口。

     抽象类:部分抽象,只需要实现抽象的方法,其他的可以直接继承过来。

8、接口和抽象类就是为了让别人来继承的,因此不能密封。

9、接口的命名规则:微软 前缀I 后缀able,比如 ICloneable ;Sun 后缀able,比如 Cloneable

     抽象类的命名规则:微软 和具体类一样,比如 StringComparer;Sun 前缀 Abstract,比如AbstractMap

10、区别于接口和抽象类,具体类不是用来继承的,因此尽量避免继承具体类。

选择抽象类还是接口

  • 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建由一些不相关对象采用的功能,就使用接口。
  • 如果必须从多个来源继承行为,就使用接口。
  • 如果知道所有类都会共享一个公共的行为实现,就可以使用抽象类,并在其中实现该行为。
阅读(3787) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~