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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王中伟 中级黑马   /  2013-7-14 19:29  /  1069 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-15 17:44 编辑

abstract class和interface有什么区别

评分

参与人数 1黑马币 +2 收起 理由
杜光 + 2 赞一个!

查看全部评分

10 个回复

倒序浏览
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报

abstract class和interface的区别
http://bbs.itheima.com/thread-34380-1-1.html
(出处: 黑马程序员训练营论坛)

评分

参与人数 1黑马币 +2 收起 理由
杜光 + 2 赞一个!

查看全部评分

回复 使用道具 举报
1,抽象类里面可以只有一个抽象方法,                   接口里面所有的方法都是抽象的,
2,抽象类里面的方法修饰符有可选项                     接口里面所有的方法修饰符都是固定的。
3,抽象类里面可以有非抽象的方法或者变量               接口不可以。而且不可以有成员变量。
4,抽象类是某类事物向上抽取出的共性的东西,重在共性   接口是给某类事物提供更多的可选的功能。重在功能扩展。
5,一个类可以继承一个抽象类                           一个类可以实现多个接口。
6,一个类继承了抽象类只要复写抽象放过就可以了         一个类实现了多个接口,就得把这些接口里面所有的方法全部复写。
7,抽象类由abstract 修饰                               接口由interface 来修饰。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
修改一下啊   6 应该是复写抽象方法 而不是 放过  呵呵  打字按错键了
回复 使用道具 举报
抽象类其实和普通类差不多,就是里边多了抽象方法,也就是它里边可以有其他的东西,变量,方法呀等等,而interface里边全是抽象方法,是必须都得实现的,不知这样说,楼主能不能理解。
回复 使用道具 举报
对不啊   楼主   3里面说错   接口里面可以有成员变量的  只不过成员变量的修饰符也是固定的  都是public static final   来修饰。  有点儿误导你了  呵呵 。实在抱歉。。
刚看到自己笔记了 才知道错了  呵呵
回复 使用道具 举报
抽象类和接口都可以被继承,不同的是,接口内的方法不能实现,需要继承的类来具体实现其方法,而抽象类中的方法可以被具体实现,并且继承的类可以重写其方法。一个类可以继承一个抽象类,但是可以继承多个接口。通常,接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色。不适于在日后重新对里面的代码进行修改。ps:这是我今天刚做过的笔记
回复 使用道具 举报
本帖最后由 wll_sx1990 于 2013-7-14 22:22 编辑

简单的说,抽象类和接口共同点在于都不能直接new出来,但是抽象类有构造函数,而接口没有。
它们的存在都是在于给用于提供方便,由用户自己决定方法该如何去实现。
它们的不同在于:抽象类中的修饰符可以自己定义,但是abstract关键字与private,final,static这些是互斥的,就是说不能一块使用。而接口中的默认都是public abstract的。
     抽象类中可以有不是抽象的方法,但是接口中的方法都是抽象的。而且接口中的成员属性都是public final类型的。总而言之,接口就是比抽象类更加抽象的抽象类。
     最后一点,抽象类只能单继承,但是接口可以多重实现。
回复 使用道具 举报
其实楼上基本都解释清楚了。我说说我的理解吧。接口是抽象类的更加抽象化,抽象类里面可以有部分实例属性,就是实实在在的属性(例如名字 年龄 标号之类的)和实例方法(有方法体内容,说白了就是有{})。但接口只有内部只有抽象方法。。。无论哪个都是必须依靠继承才能使用,可以理解为再加工。但是继承只能继承一个,这就是抽象类的不足,无法实现多继承。但接口可以,一个实现类(就是实现接口方法的子类)可以继承多个接口的,多继承的优势就体现出来了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
1、抽象类里面可以有非抽象方法但接口里只能有抽象方法 声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马