CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

讨论一下抽象类与接口的区别?

楼主HiLoveS(Faint中)2006-03-17 23:29:07 在 Java / J2SE / 基础类 提问

有时抽象类和接口的作用一样,都可以让方法在子类中具体实现。只不过使用接口可以多重继承。他们在其他方面有什么区别?特别是最近在看设计模式,有时用的抽象类,有时又用接口。Faint。 问题点数:20、回复次数:15Top

1 楼qIwEiXuE(qIwEiXuE)回复于 2006-03-17 23:44:20 得分 0

如果是抽象类,大概与特定类的继承框架耦合的紧点...  
  如果是接口,那很智能拉,不关联特定的类继承...  
   
  ==  
  偶是这么理解的!Top

2 楼f_acme(沧海一声笑)回复于 2006-03-18 11:43:11 得分 10

interface里面没有提供任何具体实现,可以说是一个极度抽象的类,他允许你创建一个能够被向上转型为不止一种基类型的类,以此来实现多重继承。  
  而抽象类则包含一种或多种抽象方法的类,且可以提供具体的实现。定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。  
   
  Java中的接口和抽象类的区别,在于接口中没有属性,而且所有的方法都是抽象的,而抽象类可以有属性,而且可以有抽象方法,也可以有实现的方法。但两者都不能被实例化。    
  使用的时候,一个类可以继承多个接口,但只能继承一个抽象类。  
  Top

3 楼glorywine(已非當年)回复于 2006-03-18 12:07:09 得分 0

继承是单一的  
  而接口可以有多个Top

4 楼suncheng_hong(亮)回复于 2006-03-18 12:25:02 得分 0

接口的成员属性为final   型的Top

5 楼francis_zj(健健)回复于 2006-03-19 14:36:14 得分 0

抽象类可以有具体的实现,但接口却不可以,一个类只有1个抽象类,但可以有多个接口  
                     
   
     
  Top

6 楼UglyTroLL(UglyTroLL)回复于 2006-03-19 16:22:07 得分 0

精华区有,或者我的blog:uglytroll.yculblog.com  
  上面有对这个问题的讨论Top

7 楼zengxftm(rainbow)回复于 2006-03-19 16:39:29 得分 0

抽象类可以有某个方法的具体实现,它的子类可以继承它的方法完成同样的功能,减少了不必要的重复劳动;  
  而接口只是给出了某些方法的模版,而没有具体的实现,实现它的类还得重新写它的具体操作。Top

8 楼zousoft(菜菜鸟的战斗诗歌)回复于 2006-03-19 16:58:58 得分 0

我是这样理解的,如果要做一个纯抽象类,也就是不包括任何非抽象方法,那么就用接口而不用抽象类。接口好处多多,是抽象类的进化产物。  
  如果还是要使用一些接口没有的东西,比如还是要用一些非抽象方法,没有办法,只能继续使用传统的抽象类了。Top

9 楼gggggame(小刀)回复于 2006-03-19 22:01:02 得分 0

比较同意楼上的Top

10 楼CYG369(JAVA&&Delphi)回复于 2006-03-20 08:46:43 得分 10

首先,采用他们都是为了禁止生成该类的实例,作为一个父类使用;  
  第二,抽象类中可以有成员变量,可以有抽象方法(需要继承他的子类去实现,   如果他的子类没有实现该抽象方法,则该子类也必须是个抽象类!),也可以有带有方法实体的方法;  
  而在接口中,只定义一些公共的方法名及其参数列表(同样需要实现(其实就是   继承)他的类去实现,也同样如果实现他的类没有实现接口中定义的方法,则此   类也必须是个抽象类!)。接口中没有成员变量,但它可以定义常量(必须初始化),但一般不这样做(除非一定要用接口进行常量管理),以保证接口的整洁   。  
  第三,java中的单继承性,接口可以多重继承   ,     抽象类不可以.  
  所以,抽象类和接口适用的原则是:大多数情况下,应该首选接口去实现,除非   确实需要带有成员变量(或是带有方法实体的方法),再选择抽象类。    
  Top

11 楼grant999(民)回复于 2006-03-20 10:07:15 得分 0

接口有属性,默认是static   finalTop

12 楼luoluonet(螺螺.net)回复于 2006-03-20 10:44:06 得分 0

抽象类中有实例变量,一般也包含一个显式的构造函数,用于子类  
   
  继承(extends),只是其中有些方法没有方法体,要等各种子类来实现各种不同的细节,而接  
   
  口中没有实例变量,只有一系列无方法体的抽象方法用于被各种类来实现(implements)。不  
   
  相关的类可以实现同一个接口(接口的强大之处),而不相关的子类却不可以继承同一个抽象  
   
  类(继承同一个抽象的各个子类一定是相关的,因为构造函数是一致的)。  
  Top

13 楼liang8305(换工作的时间到了...)回复于 2006-03-20 10:49:01 得分 0

学习,占个位置Top

14 楼crazycy(崔毅,blog:http://www.blogjava.net/crazycy/)回复于 2006-03-20 13:08:41 得分 0

学习,占个位置,兔,然后友情UP,攒rpTop

15 楼zeq258(周二强)回复于 2006-03-20 13:24:21 得分 0

f_acme(沧海一声笑)    
   
  很清晰,学习下!  
   
  谢谢!Top

相关问题

  • 接口与抽象类的区别???
  • 抽象类和接口区别总结
  • 请问,接口与抽象类之间有何区别
  • 请问抽象类和接口的区别
  • 在java中接口与抽象类在使用中有多大的区别
  • 重写一个抽象类的抽象方法 和 实现一个接口有什么区别?
  • 如何写抽象类和接口?
  • 抽象类和接口的讨论
  • 接口能不能继承抽象类?
  • c#中虚函数,抽象类和接口有什么区别? 这三者一般在什么情况下使用?

关键词

  • 接口
  • 属性
  • 学习
  • 抽象
  • 类
  • 子类
  • 方法
  • 继承
  • 实现
  • 变量

得分解答快速导航

  • 帖主:HiLoveS
  • f_acme
  • CYG369

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo