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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尚新泽   /  2015-8-16 22:40  /  6746 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
其次再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码
回复 使用道具 举报
参考下哈:
抽象类和常规类一样,都有数据和方法,但是不能用new操作符创建抽象类的实例,抽象类可以包含抽象和非抽象方法。
接口只包括常量和抽象方法。
两者不同点:

变量:
  抽象类:无限制
  接口:所有变量都必须是public static final

构造方法:
  抽象类:子类通过构造方法链调用构造方法,抽象类不能用new操作符实例化
  接口:没有构造方法,接口不能用new操作符实例化

方法:
  抽象类:无限制
  接口:所有的方法必须是公共的抽象实例方法
回复 使用道具 举报
我是在职的看做java的,接口内一般不定义属性,只会定义方法名,接口一般是为类做功能扩展的和实现接口的类不一定在在属性和行为上有特定的联系,而抽象类与继承它的类是有继承关系的,会继承抽象类中的属性,集成他的类算是它的一个分支。
回复 使用道具 举报
接口里面全部都是抽象方法,但是抽象类里面可以有实例方法的。看到这句话你知道什么时候用了吧。你在用接口的时候必须要重新接口的所有抽象方法。而抽象类则不用。接口是一种约束和能力。
回复 使用道具 举报
1、抽象类里面可以有非抽象方法
但接口里只能有抽象方法
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
回复 使用道具 举报
Ci功 中级黑马 2015-8-25 12:43:06
26#
接口,可以多实现,这个功能最爽了
回复 使用道具 举报
接口和抽象类区别是:1.抽象类需要被继承,而且只能单继承。而接口需要被实现,而且可以多实现。2.抽象类中可以定义抽象的方法和非抽象的方法,子类继承后可以直接使用非抽象的方法。接口只能定义抽象的方法,必须要子类去实现。3.抽象类的继承是is,a的关系是定义该体系的基本共性内容。接口的实现是like,a的关系,在定义体系额外的功能
回复 使用道具 举报
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
回复 使用道具 举报
接口和抽象类都是不断向上抽取来的,抽象类只能单继承,接口可以多实现,你可以继承了抽象类后再多实现接口让子类有跟多的方法
回复 使用道具 举报
通俗的说抽象是用来实现共性内容的,而接口是用来实现扩展功能的,当一个对象需要对功能进行扩展的时候一般使用接口。
回复 使用道具 举报
楼上总结的都很好,我也想发表下我的小看法啊~
我是一个人,会吃饭睡觉,嗯,我还会一些java编程,喜欢打游戏。
那么,地球有这么多人,抽象出一个概念,人类,都有吃饭睡觉的行为,所以,我觉得抽象类的作用就是描述相同事物共同行为的类。同时你也看到,抽象类是要被继承的,那么,就说明了他是“is a”关系,因为描述一类事物,你不可能说他既是.....又是.....;最好的说法:他是....(类的单继承),但是像....,也像....,还像....(接口的多实现)的描述。
那么接口就是来提供“像(like a)”这个关键字的方法。那么,我喜欢打游戏,会写java,就是一些我个人的属性了,其他人可以和我相同,有重叠,或者完全不同。和我相同的行为就可以抽象成一个接口,按需来实现。
出身不能改变(继承),但是可以后天努力(接口)。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马