A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩俊 中级黑马   /  2012-11-29 09:32  /  1390 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口和抽象类的有什么区别?

3 个回复

倒序浏览
请看看这篇帖子的回答:http://bbs.itheima.com/thread-2650-1-1.html
回复 使用道具 举报
本帖最后由 yunhaitian 于 2012-11-29 12:15 编辑

1.抽象类
  抽象方法必须放在抽象类中,但抽象类中不一定都是抽象方法。
  子类继承抽象类后,必须覆写所有的抽象方法后才能建立子类对象调用。如果子类只是覆写了所继承的抽象类中的部分方法,那该子类必须仍为抽象类。
  子类中一些共有的功能,但是具体实现方式不同,于是抽取出来,放入抽象类。所以抽象类对于子类也有一些规范作用。

  用处:当某个类定义了一个方法供子类调用,但是方法中有一部分功能是不能具体确定的,所以这一部分以另一个方法来封装。但是不同子类,该功能具体实现内容不同,所以需要子类分别覆写该方法, 当某个功能不确定时候,就用抽象。

2.接口
方法都是抽象的。
  实现接口的子类需要将接口中的抽象方法都覆写后才可以实例化,否则子类中就包含抽象方法,相当于抽象类了。
  接口用途:
           a.接口是对外暴露的规则。功能实现的框架。
           b.接口是程序的功能扩展。
           c.降低了耦合性。
  作为功能扩展应用接口。此时,接口用于扩展从共有类中无法继承到,而某些实体确实包含的功能。

****接口的出现降低了耦合性,增强了功能的扩展性,提供了规则;多态的应用增强了程序的扩展性。
回复 使用道具 举报
1.两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。

ex:举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。

2.抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

3.继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。
4.在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马