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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 laoyang 于 2011-11-21 10:52 编辑

什么时候用到抽象类,什么时候用到接口呢?

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

13 个回复

倒序浏览
接口是一种特殊的抽象类,接口中的方法都是抽象的
抽象类中的方法不一定都是抽象的,但是有抽象方法的类一定是抽象类
实现接口要把接口的所有方法重写;抽象类的话就实现你想要的方法就行
举个例子,比如说awt组件里面的监听器接口,XXXListener,如果就想要这个接口里面的某个方法,没必要直接去继承这个接口,因为继承了接口就要实现里面的全部方法,所以java提供了XXXListener的适配器(XXXAdaptor),也就是一个继承了XXXListener接口的抽象类,你可以选择你想要的方法去实现,其他的方法不用管
还有java是单继承,如果实现了一个抽象类就不能在继承其他类;接口可以实现多继承
回复 使用道具 举报
抽象类和接口是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
接口是一种特殊的抽象类,接口中的方法都是抽象的
java是单继承,只能继承一个类,但是可以继承多个接口
举个例子,awt组件上的监听器接口,如xxxListener,如果只想要里面的某个方法,就没必要去实现这个接口,因为要重写里面的所有方法,你可以实现继承了这个接口的适配器类xxxadaptor,这样只重写你想要的方法就行了
回复 使用道具 举报
我觉得你的问题应该是区分两者的区别

1、抽象类里面可以有非抽象方法
但接口里只能有抽象方法
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 olkldksl 于 2011-11-7 12:22 编辑

接口是一种特殊的抽象类,接口中的方法都是抽象的
java是单继承,只能继承一个类,但是可以继承多个接口
举个例子,awt组建中的监听器,如XXXListener接口,你要是只想用里面的某一个方法,就没必要实现这个接口,可以去继承实现了这个接口的XXXAdaptor适配器抽象类,然后重写你想要的方法就行了
回复 使用道具 举报
olkldksl 黑马帝 2011-11-7 12:28:27
7#
接口是一种特殊的抽象类,接口中的方法都是抽象的
java是单继承,只能继承一个父类,但是可以继承多个接口
举个例子,awt组件里的监听器,如XXXListener接口,如果只想要里面的某一个方法,就没必要去实现这个接口,因为要重写里面的所有方法;可以去继承实现了这个接口的XXXAdaptor适配器抽象类,只要重写你想要的方法就行了
回复 使用道具 举报
贺洪京 黑马帝 2011-11-7 13:01:25
8#
抽象类:
是不可实例化的类,但是可以有属性有方法,方法可以有方法体,继承关键字用extends,类只能有一个父类(单一继承),类如果继承抽像类可以覆盖抽象类的方法也可以不覆盖直接用抽象类的方法。

接口:可以说成是一个特殊的抽象类,可以有属性有方法,但是方法只能有声明,不能有方法体,实现接口使用的关键字是implements,一个类可以实现多个接口,如果一个类实现了一个接口那么这个类就要实现接口中所有的方法。


评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王赫麟 黑马帝 2011-11-7 15:50:41
9#
看老师的那个就业指导里面有一个详细的讲述就是抽象类和接口的区别。
我的理解是
抽象类不可以进行具体的实例,但是可以有属性和方法,可以被继承。
而接口等于说是一个特殊的抽象类,只是创建出方法的声明,以及里面要传的一些参数属性命名,但是绝对不会有具体的方法,绝对有木有?
只是个人理解,不知道对不对,没有上面同学理解的那么深,惭愧{:soso_e154:}
回复 使用道具 举报
张翼 黑马帝 2011-11-7 19:37:13
10#
     抽象类和接口简单的说就是一句话,抽象类中的方法不用全部实现,但是接口中的方法就必须全部去实现,在这里我把接口和抽象类定义为包,如果仅仅想使用其中的一个或几个方法,则使用抽象类,但是如果要使用全部方法则必须使用接口;
    当然,还有一种情况,必须使用接口,就是在事件类中,虽然有些方法用不到,但是也必须实现,当然也可继承相应Adapter类,解决这个冲突。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马