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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一只文字 中级黑马   /  2013-8-9 10:23  /  1327 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学完接口和抽象类了,也明白她们的区别,可是如果叫我到实际开发中 我却不知道什么时候该用抽象类 什么时候用接口? 求指导

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

8 个回复

倒序浏览
用abstract修饰的类就是抽象类,抽象类中不一定全是抽象方法,接口中的方法全是抽象方法,抽象类属于类可以继承,但是接口是一种特殊的抽象类,用interface定义,接口用implents实现,
个人建议能用接口就用接口

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李健09 于 2013-8-9 15:53 编辑

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


评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
我觉得吧,接口和抽象类都是对共性功能的抽取,可以在使用时按照实际情况重写方法;
如果要使用系统预定义好的接口或者抽象类,你想要实现的功能在接口中,那就选择实现接口,如果想要的功能在抽象类中,那就选择继承抽象类;
如果是程序员自己定义接口或者抽象类,如果要定义的功能全都是不具体的,全都要在子类使用的时候自己重写,那就定义接口,因为接口中的方法全都是抽象的嘛,
如果要定义的功能有些是具体的、固定的,而有些是不具体的,需要子类自己重写,那就定义抽象类,因为抽象类中只有一个或者几个抽象方法,甚至一个抽象方法都没有,只是为了不让建立该类的对象;

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
#在这里快速回复#因为java中没有多继承的概念,所以,如果你实现类似C++的多继承那么就得运用到接口实现。还有一点的区别,抽象类一般都是抽象某些事物(对象)的共性即属性和方法,但是每个对象的实例或许有不同点。那么我们就需要用接口将这个不同点的对象抽象出来。对于普通的对象我们只需要实现抽象类即可,但是,对于有特点的对象我们需要实现抽象类和接口。不知道你明白了没

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
抽象类:在定义一个类的时候,其子类都会有共性的方法,但是这些方法中的内容不同的时候,就需要把这些方法抽取出来定义一个抽象方法,这样就确保其子类必须要复写所有这些方法以后才能建立对象。这个类就成为了一个抽象类。
接口:
但是java中不能继承多个父类,所以扩展性不强,并且这时候就需要用到接口提高扩展性。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
抽象类:在定义一个类的时候,其子类都会有共性的方法,但是这些方法中的内容不同的时候,就需要把这些方法抽取出来定义一个抽象方法,这样就确保其子类必须要复写所有这些方法以后才能建立对象。这个类就成为了一个抽象类。
接口:
但是java中不能继承多个父类,所以扩展性不强,并且这时候就需要用到接口提高扩展性。
回复 使用道具 举报
JAVA中只支持单继承、多实现,所以优先选择实现一个接口。
在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类定义。
interface在某些地方和abstract有相似的地方,但是采用哪种方式来声明类主要参照以下两点:
1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
2. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候(在interface里面的变量都是public static final 的),才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。
所以:接口和抽象类,怎么选?当我们确定某个事物应该成为一个基类的话,接口是第一选择。

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

回复 使用道具 举报
接口是一种协定,抽象类则相当于类模板。使用抽象类,而不要使用接口来分离协定与实现。
如果需要提供多态层次结构的值类型,使用接口。如果一个类型必须实现多个协定,或者协
定适用于多种类型,使用接口。虽然抽象类和接口都支持将协定与实现分离开来,但接口不
能指定以后版本中的新成员,而抽象类可以根据需要添加成员以支持更多功能。优先考虑定
义类,而不是接口。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马