黑马程序员技术交流社区

标题: 关于接口和抽象类的使用问题 [打印本页]

作者: 一只文字    时间: 2013-8-9 10:23
标题: 关于接口和抽象类的使用问题
学完接口和抽象类了,也明白她们的区别,可是如果叫我到实际开发中 我却不知道什么时候该用抽象类 什么时候用接口? 求指导
作者: 肖博    时间: 2013-8-9 14:17
用abstract修饰的类就是抽象类,抽象类中不一定全是抽象方法,接口中的方法全是抽象方法,抽象类属于类可以继承,但是接口是一种特殊的抽象类,用interface定义,接口用implents实现,
个人建议能用接口就用接口
作者: 李健09    时间: 2013-8-9 15:43
本帖最后由 李健09 于 2013-8-9 15:53 编辑

      当多个类中出现相同功能,但功能主体不同,这时可以进行向上抽取建立抽象类,只抽取功能定义,而不抽取功能主体定义功能,而后通过子类具体实现功能;
      我是这样理解的就是相同功能的不同表现就用抽象类,把相同的抽取建立抽象类
      接口是对外暴露的功能,是程序功能的扩展(里面有很多方法且所有的方法都是抽象的),可以用来多实现,类与接口之间是实现关系,而且类可以继承一个类的
      同时实现多个接口这样这个类就实现了很多的功能, 功能的扩展使用接口



作者: 蚂蚁搬家    时间: 2013-8-9 15:58
我觉得吧,接口和抽象类都是对共性功能的抽取,可以在使用时按照实际情况重写方法;
如果要使用系统预定义好的接口或者抽象类,你想要实现的功能在接口中,那就选择实现接口,如果想要的功能在抽象类中,那就选择继承抽象类;
如果是程序员自己定义接口或者抽象类,如果要定义的功能全都是不具体的,全都要在子类使用的时候自己重写,那就定义接口,因为接口中的方法全都是抽象的嘛,
如果要定义的功能有些是具体的、固定的,而有些是不具体的,需要子类自己重写,那就定义抽象类,因为抽象类中只有一个或者几个抽象方法,甚至一个抽象方法都没有,只是为了不让建立该类的对象;
作者: vampire★sky    时间: 2013-8-9 17:56
#在这里快速回复#因为java中没有多继承的概念,所以,如果你实现类似C++的多继承那么就得运用到接口实现。还有一点的区别,抽象类一般都是抽象某些事物(对象)的共性即属性和方法,但是每个对象的实例或许有不同点。那么我们就需要用接口将这个不同点的对象抽象出来。对于普通的对象我们只需要实现抽象类即可,但是,对于有特点的对象我们需要实现抽象类和接口。不知道你明白了没
作者: 夜写意    时间: 2013-8-9 21:35
抽象类:在定义一个类的时候,其子类都会有共性的方法,但是这些方法中的内容不同的时候,就需要把这些方法抽取出来定义一个抽象方法,这样就确保其子类必须要复写所有这些方法以后才能建立对象。这个类就成为了一个抽象类。
接口:
但是java中不能继承多个父类,所以扩展性不强,并且这时候就需要用到接口提高扩展性。
作者: 夜写意    时间: 2013-8-9 21:35
抽象类:在定义一个类的时候,其子类都会有共性的方法,但是这些方法中的内容不同的时候,就需要把这些方法抽取出来定义一个抽象方法,这样就确保其子类必须要复写所有这些方法以后才能建立对象。这个类就成为了一个抽象类。
接口:
但是java中不能继承多个父类,所以扩展性不强,并且这时候就需要用到接口提高扩展性。
作者: 封号了...    时间: 2013-8-10 00:45
JAVA中只支持单继承、多实现,所以优先选择实现一个接口。
在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类定义。
interface在某些地方和abstract有相似的地方,但是采用哪种方式来声明类主要参照以下两点:
1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
2. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候(在interface里面的变量都是public static final 的),才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。
所以:接口和抽象类,怎么选?当我们确定某个事物应该成为一个基类的话,接口是第一选择。
作者: 赵国刚    时间: 2013-8-10 08:43
接口是一种协定,抽象类则相当于类模板。使用抽象类,而不要使用接口来分离协定与实现。
如果需要提供多态层次结构的值类型,使用接口。如果一个类型必须实现多个协定,或者协
定适用于多种类型,使用接口。虽然抽象类和接口都支持将协定与实现分离开来,但接口不
能指定以后版本中的新成员,而抽象类可以根据需要添加成员以支持更多功能。优先考虑定
义类,而不是接口。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2