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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

3黑马币
谁能详细说一下接口与抽象类的区别呢?  什么时候用接口,什么时候用抽象类.请详细说明不要太官方了.来个通俗易懂的.

30 个回复

正序浏览
楼上总结的都很好,我也想发表下我的小看法啊~
我是一个人,会吃饭睡觉,嗯,我还会一些java编程,喜欢打游戏。
那么,地球有这么多人,抽象出一个概念,人类,都有吃饭睡觉的行为,所以,我觉得抽象类的作用就是描述相同事物共同行为的类。同时你也看到,抽象类是要被继承的,那么,就说明了他是“is a”关系,因为描述一类事物,你不可能说他既是.....又是.....;最好的说法:他是....(类的单继承),但是像....,也像....,还像....(接口的多实现)的描述。
那么接口就是来提供“像(like a)”这个关键字的方法。那么,我喜欢打游戏,会写java,就是一些我个人的属性了,其他人可以和我相同,有重叠,或者完全不同。和我相同的行为就可以抽象成一个接口,按需来实现。
出身不能改变(继承),但是可以后天努力(接口)。
回复 使用道具 举报
通俗的说抽象是用来实现共性内容的,而接口是用来实现扩展功能的,当一个对象需要对功能进行扩展的时候一般使用接口。
回复 使用道具 举报
接口和抽象类都是不断向上抽取来的,抽象类只能单继承,接口可以多实现,你可以继承了抽象类后再多实现接口让子类有跟多的方法
回复 使用道具 举报
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
回复 使用道具 举报
接口和抽象类区别是:1.抽象类需要被继承,而且只能单继承。而接口需要被实现,而且可以多实现。2.抽象类中可以定义抽象的方法和非抽象的方法,子类继承后可以直接使用非抽象的方法。接口只能定义抽象的方法,必须要子类去实现。3.抽象类的继承是is,a的关系是定义该体系的基本共性内容。接口的实现是like,a的关系,在定义体系额外的功能
回复 使用道具 举报
Ci功 中级黑马 2015-8-25 12:43:06
25#
接口,可以多实现,这个功能最爽了
回复 使用道具 举报
1、抽象类里面可以有非抽象方法
但接口里只能有抽象方法
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
回复 使用道具 举报
接口里面全部都是抽象方法,但是抽象类里面可以有实例方法的。看到这句话你知道什么时候用了吧。你在用接口的时候必须要重新接口的所有抽象方法。而抽象类则不用。接口是一种约束和能力。
回复 使用道具 举报
我是在职的看做java的,接口内一般不定义属性,只会定义方法名,接口一般是为类做功能扩展的和实现接口的类不一定在在属性和行为上有特定的联系,而抽象类与继承它的类是有继承关系的,会继承抽象类中的属性,集成他的类算是它的一个分支。
回复 使用道具 举报
参考下哈:
抽象类和常规类一样,都有数据和方法,但是不能用new操作符创建抽象类的实例,抽象类可以包含抽象和非抽象方法。
接口只包括常量和抽象方法。
两者不同点:

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

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

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

(1): 成员区别
       
        抽象类:
                成员变量:        可以是变量也可以是常量
                构造方法:        有构造方法
                成员方法:        可以是抽象方法,也可以是非抽象方法
        接口:
                成员变量:        只能是常量 ,存在默认的修饰符: public static final
                构造方法:        没有构造方法
                成员方法:        只能是抽象方法, 存在默认的修饰符: public abstract
(2): 关系区别:
       
        类与类:                继承关系, 只能是单继承 , 不能是多继承,但是可以是多层继承
        类与接口:        实现关系, 可以是单实现,也可以是多实现,并且一个类可以继承一个类的同时去实现多个接口
        接口与接口:        继承关系  可以是单继承也可以是多继承

(3): 设计理念
       
        抽象类                体现的关系"is a"                抽象类中定义的是该继承体系的共性功能。
        接口                体现的关系"like a"                接口中定义的是该继承体系的扩展功能。
回复 使用道具 举报
他们都说的挺好的,我简单概括一下吧:

java的数据类型有八种基本类型和三大引用类型,其实中数组,类,和借口就是这三种引用类型。
那么抽象类和接口有哪些异同:
1、接口中所有的方法隐含的都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法。

2、类可以实现很多个接口,但是只能继承一个抽象类。

3、类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。

4、抽象类可以在不提供接口方法实现的情况下实现接口。这句话的意思是说,抽象类实现接口时,接口中定义的抽象方法,不需要复写到抽象类中,这个很好理解,抽象类中定义抽象方法,而接口中都是抽象方法,都需要由继承他们的类去实现其中的抽象方法。所以抽象类可以不复写接口中的方法,但是继承抽象类的子类一定要实现接口中的方法。

5、接口中声明的变量默认都是final的。抽象类可以包含非final的变量。也就是说接口中的变量其实就是常量,而抽象类可以定义成员变量。

6、接口中的成员函数默认是public修饰符。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

抽象类和接口的用法
抽象类:如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。抽象类中可以有一般的变量和一般的方法。子类继承抽象类必须实现其中抽象方法,除非子类为抽象类。  private void print(){};此语句表示方法的空实现。 abstract void print(); 此语句表示方法的抽象,无实现。
抽象类的用法:一般多态的应用比较多。

接口:因为java不支持多继承所以就出现了接口,接口不能实现另一个接口,但可以继承多个接口。接口里面的成员变量默认都是public static final类型的,即使static漏写了,也是会被默认添加上的,接口里面的方法默认都是public abstract类型的。接口没由构造器不能被实例化。
视频里毕老师讲接口解释为规则,我认为这种比喻比较贴切。类是又来描述某一类事物,可以说是抽取某写事物的共同特点的产物,我们得到一个类,给他添加特有的数据就成了实例对象了。那么至于规则(接口)又怎么理解呢?我们以接力赛为例。一群运动员要参加比赛,我们可以把各个国家的运动会代表队看成类的对象,如果想参加接力赛就要遵守接力赛的规则:每组四个人,每个人都擅长短跑,每个人一圈,还要有接力棒。具备这些条件就能参赛了,如果少一个人或者没有接力棒就不能参赛了,除非实现了这个接口,在项目中如果要某些类型参与到某些类运算当中而又不能采用继承的方式使其满足条件,就可以考虑定义借口了。我个人在开发中看到很多程序在接口中定义大量常量,这样可以实现数据共享,避免就重复声明相同的数据啦!

回复 使用道具 举报
接口的使用与抽象类类似,不能直接使用,需要创建子类对象,然后通过子类对象调用成员方法和成员变量。比抽象更抽象
回复 使用道具 举报
唯一的区别在于,接口必须要之类复写,而抽象类不一定需要子类复写,抽象类几乎用不着,接口在方法回调时候用到比较多。我是42期学员,已经工作8个太月
回复 使用道具 举报
接口的所有属性和行为都是抽象的,没有构造方法。
抽象类,可以有成员变量,成员常量;有构造方法;有成员方法,抽象的和非抽象的
回复 使用道具 举报
抽象类是创建的“内”引用,接口是”外“引用
回复 使用道具 举报
接口:like a
抽象类:is a
向框架方面理解理解
回复 使用道具 举报
接口就是方法都是抽象的,这个时候用。如果是抽象类,方法不都是抽象的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马