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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 苏格拉底的弟子 于 2012-2-1 20:25 编辑

抽象类和接口都在什么情况下用啊?

10 个回复

倒序浏览
抽象类是,当你对一些类进行功能抽取以后组成一个新类,
然后用那些类来继承它,但是这个抽取了功能的类未必要实例化,
这个时候,就定义成抽象类
接口就更简单了,当你想对你的类进行体系外的扩展
就需要再定义多一个借口,用该类来实现,
就是说有一个家族的人,但是仅有几个子孙是玩很多新奇的科技,例如ipad
但是这个家族的人不是个个都玩嘛,
所以给那些子孙归类为,{玩ipad的那群孩子}。
而你就可以定义一个ipad的接口,供这些孩子实现。
回复 使用道具 举报
感觉都是相当于“父类”的感觉,
一个让子类继承,一个是被实现,都是要实现抽象方法。
只是继承只能是单继承,接口却可以实现多个。
这样一个子类既能继承父类,又能实现接口,两两结合,相当于多继承的感觉。
回复 使用道具 举报
抽象类中的方法既可以有抽象方法,也可以是实体的方法。
接口中定义的方法都是抽象的,所有实现它的类都要复写接口的所有方法,因此接口被用来建立类与类之间的协议。
而且接口可以多实现的,而抽象类却不能多继承。
回复 使用道具 举报
是在什么情况下用啊?
当有很多类时,它们都有一些共同的方法功能,
就可以集合向上抽取这些功能进行整合成一个不需实例化的类,
但这些具体的功能还得需子类去继承整合类进行具体的操作功能,
所以定义成抽象类;
当你需要进行此类功能之外的功能扩展,
就需要实现接口.
回复 使用道具 举报
当多个类中出现相同部分的功能定义但是功能主体可能不同,我们可以抽取其功能的定义形成的新类我们称为抽象类,它相当于一个“模板”,它是定义一个功能,但怎么去实现这个功能是要由子类去实现的。但是它还是和子类属于同一个体系的。
而接口它一般是用于这个体系的扩展功能的。怎么用上面的已经说了,我就不再举例了
回复 使用道具 举报
1.抽象类是用extends关键字来继承,而接口是用implements来实现的
2.抽象类里面可以有实现方法,可以有抽象方法,而接口只能是抽象方法,里面不能有实现
3.他们共同点就是一个规范,用于定义规则,共其它类使用,都是多态的一种表现。

个人理解,有不对的请指证。
回复 使用道具 举报
王_涛 黑马帝 2012-2-1 17:15:19
8#
接口只关心功能,并不关心功能的具体实现
接口的思想在于它可以增加很多类需要的功能,使用相同的接口不一定有继承关系。

抽象类和接口是作为对象的描述,在底层设计时用到。
接口更偏重于对象所具有的功能。

存在继承关系,或有公共方法且实现功能一样时,使用抽象类。只关心功能存在性时,使用接口

接口和抽象类的区别
    1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
  2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。
  3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
回复 使用道具 举报
接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。
回复 使用道具 举报
抽象类是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能,它可以提供已实现的成员,因此,可以用抽象类确保特定数量的相同功能,但不能用接口这样做。
抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
回复 使用道具 举报
易伟 黑马帝 2012-2-1 17:49:32
11#
接口一般来讲是形成规范时使用
例如,KFC的餐厅需要一个厨房,5个厨师,10个服务员
这个就是用接口定义的

抽象类一般用来简化类
当多个类(一般是同用途的类)中含有共同的方法和属性时,将共同的方法和属性抽取出来放在一个抽象类中,所有的类都继承他,并实现它

接口只关心功能,并不关心功能的具体实现
接口的思想在于它可以增加很多类需要的功能,使用相同的接口不一定有继承关系。

存在继承关系,或有公共方法且实现功能一样时,使用抽象类。
只关心功能存在性时,使用接口
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马