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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lyg2013 中级黑马   /  2013-4-7 21:45  /  2871 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract classinterface有什么区别?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

10 个回复

倒序浏览
interface是接口,abstract class是抽象类。
主要区别:1、接口可以多重implement(实现),抽象类只能单一extends(继承)2、接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。3、接口字段定义默认为public static final,而抽象类的则默认为friendly。
回复 使用道具 举报
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

     接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然

eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
当一个抽象类中的所有方法都是抽象方法时可以把这个类定义成接口的形式,接口中的变量和函数都有固定的格式.抽象类是继承关系而接口是实现关系.
抽象类只能单继承,而接口可以多实现.接口与接口之间存在多继承,接口弥补了单继承的局限性.
抽象类中可以定义一般方法,接口中必须全部是抽象方法.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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

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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
简单的说,抽象类还是一个类,只是不能被new一个实例,其中可以有抽象的方法,而接口完全是一个纯的抽象,封装了一些功能。你实现了接口,也就具备了这些功能,由于java只支持单继承,才有了接口,使用接口编程更加的可扩展。
回复 使用道具 举报
1. 抽象类(abstract)是一个类, 它是用来被继承的,只能单继承,不能被实例化
   接口(interface)是用来被实现的,它可以多实现,同样不能被实例化

2. 抽象类描述的是is   描述的是基本功能
   接口描述的是like  描述的扩展的功能

3. 抽象类中可以有抽象方法也可以没有抽象方法
   接口中的方法全是抽象的。接口中的属性修饰符规定是public static final  接口中的方法修饰符规定是public abstract

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
上面说的都很不错,不过还有几点,用过的就会明白:
1.抽象类中的内容要想被使用,必须是其子类(或者更下一级),使用有限制,而我想让一个类实现接口中的功能,就没必要“继承”(这个继承是不存在的,为了类比抽象类)接口,只需要去实现即可,例如:学生会跑,猴子也会跑,都可以实现一个跑的接口
2.在实际开发中,接口使用较多,因为接口主要就是定义功能,定义好了以后,可以由其他人去实现,便于团队协作开发
3.接口的多继承是java对单根性的一个补充,抽象类也是类,肯定会有单根性的问题

再一个,生活中的接口跟程序中的接口不一样,生活中我们见到的都是类的对象,因为类是抽象的,我们看不到。
但是生活中的接口我们能真真正正的看到和被使用,所以生活中的接口的真实程序意义是“接口这种类”的对象,而我们程序中的所谓“接口”是一种定义,而不是实实在在的对象,所以他们是有本质的区别的,

了解上上面这些内容之后,就能理解很多问题,
诸如:
我的一个接口中有两个功能,我能不能只使用一个?就像只使用电脑USB接口的充电功能一样  
答案:不能,因为现实中的USB接口是一个“对象”,而程序中的接口是一种规定,只要是接口,java就规定你必须实现所有功能,除非你也是抽象类

我的电脑上有多个USB接口,我可不可以在程序中也这样定义几个接口啊?都让他们实现相同的接口
答案:不能,答案还是上面那几句话,接口是一种约定,既然你电脑上的USB接口都相同,肯定所遵守的约定都相同,即都遵循同一个约定,那约定肯定就是一个啦

希望能让你理解接口更深一点,记得曾经听课的时候老师说过,没有个几年工作经验,是不会明白接口的,现在想想,还真有点道理~~

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
接口可以多实现,抽象类只能单继承.
抽象类中 可以不全是抽象方法,而接口中必须全是抽象方法.
抽象类的子类必须复写父类所有抽象方法,不然子类也会变成抽象类.
接口也一样,不然不能实例化.

通俗点说,接口就是强制你做事的行为规范.
接口内容全部都是抽象的.
你实现一个接口就必须复写其所有方法,才能实例化,这样就是逼着你按照接口来做事.
就像电脑PCI了 你必须按照PCI的规则来生产配件要不然插不上去.
接口也是这意思,你要按照接口内的抽象内容来定义接口的实现.有了接口的规范,才不会乱定义实现方法,只能按照已有的 进行复写.
也就像PCI了  我定义了插槽的长度,你就必须生产这个长度的(可以将其看成抽象方法),而你生产这个长度的配件的用料,是金还是铁还是铜或者塑料那是你的事情.(就
相当于接口的抽象方法的具体实现,怎么实现那是我的事,我只是按照你的规范来做.).
通过接口,降低了对象之间的 耦合性 使得它们之间的依赖程度大大降低,相对比较独立.
而接口就是串联它俩的.


人有点困,可能上面说的语句逻辑不通顺,额,太困了 我还是睡觉吧,我想意思应该表达出来了.


---赶明要补习补习语文啊!!!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
    吴老师特意发了个相关的帖子,建议过去看看~  

   扯淡——类、抽象类、接口的语义区别
回复 使用道具 举报
1、抽象类可以包含部分方法的实现,这是抽象类优于接口的一个主要地方。

2、由于Java的单继承,每个类只能从一个抽象类继承,但是每个类可以实现多个接口,使用接口还可以实现Mixin混合类型的类。接口可以继承多个接口,即接口间可以多重继承。

3、将类抽取出通用部分作为接口容易,要作为抽象类则不太方便,因为这个类有可能已经继承自另一个类。

4、可以将接口和抽象类一起使用。在集合框架体系中,顶层接口Collection定义了一些方法,同时又提供了几个抽象类 AbstractCollection、AbstractList、AbstractMap实现了一些方法,这样具体的集合实现类可以选择从抽象类中继承或直接实现接口。

补充:

1、包含一个或多个抽象方法的类本身必须被声明为抽象的;
2、除了抽象方法外,抽象类还可以包含具体数据和具体方法;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马