黑马程序员技术交流社区

标题: abstract class和interface有什么区别 [打印本页]

作者: 王中伟    时间: 2013-7-14 19:29
标题: abstract class和interface有什么区别
本帖最后由 杨兴庭 于 2013-7-15 17:44 编辑

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

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

作者: 左手神刀    时间: 2013-7-14 20:05
1,抽象类里面可以只有一个抽象方法,                   接口里面所有的方法都是抽象的,
2,抽象类里面的方法修饰符有可选项                     接口里面所有的方法修饰符都是固定的。
3,抽象类里面可以有非抽象的方法或者变量               接口不可以。而且不可以有成员变量。
4,抽象类是某类事物向上抽取出的共性的东西,重在共性   接口是给某类事物提供更多的可选的功能。重在功能扩展。
5,一个类可以继承一个抽象类                           一个类可以实现多个接口。
6,一个类继承了抽象类只要复写抽象放过就可以了         一个类实现了多个接口,就得把这些接口里面所有的方法全部复写。
7,抽象类由abstract 修饰                               接口由interface 来修饰。
作者: 左手神刀    时间: 2013-7-14 20:08
修改一下啊   6 应该是复写抽象方法 而不是 放过  呵呵  打字按错键了
作者: zcbyzcb    时间: 2013-7-14 20:20
抽象类其实和普通类差不多,就是里边多了抽象方法,也就是它里边可以有其他的东西,变量,方法呀等等,而interface里边全是抽象方法,是必须都得实现的,不知这样说,楼主能不能理解。
作者: 左手神刀    时间: 2013-7-14 21:12
对不啊   楼主   3里面说错   接口里面可以有成员变量的  只不过成员变量的修饰符也是固定的  都是public static final   来修饰。  有点儿误导你了  呵呵 。实在抱歉。。
刚看到自己笔记了 才知道错了  呵呵
作者: 闲人忙啊    时间: 2013-7-14 22:03
抽象类和接口都可以被继承,不同的是,接口内的方法不能实现,需要继承的类来具体实现其方法,而抽象类中的方法可以被具体实现,并且继承的类可以重写其方法。一个类可以继承一个抽象类,但是可以继承多个接口。通常,接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色。不适于在日后重新对里面的代码进行修改。ps:这是我今天刚做过的笔记
作者: wll_sx1990    时间: 2013-7-14 22:18
本帖最后由 wll_sx1990 于 2013-7-14 22:22 编辑

简单的说,抽象类和接口共同点在于都不能直接new出来,但是抽象类有构造函数,而接口没有。
它们的存在都是在于给用于提供方便,由用户自己决定方法该如何去实现。
它们的不同在于:抽象类中的修饰符可以自己定义,但是abstract关键字与private,final,static这些是互斥的,就是说不能一块使用。而接口中的默认都是public abstract的。
     抽象类中可以有不是抽象的方法,但是接口中的方法都是抽象的。而且接口中的成员属性都是public final类型的。总而言之,接口就是比抽象类更加抽象的抽象类。
     最后一点,抽象类只能单继承,但是接口可以多重实现。

作者: 诸隆隆    时间: 2013-7-14 22:20
其实楼上基本都解释清楚了。我说说我的理解吧。接口是抽象类的更加抽象化,抽象类里面可以有部分实例属性,就是实实在在的属性(例如名字 年龄 标号之类的)和实例方法(有方法体内容,说白了就是有{})。但接口只有内部只有抽象方法。。。无论哪个都是必须依靠继承才能使用,可以理解为再加工。但是继承只能继承一个,这就是抽象类的不足,无法实现多继承。但接口可以,一个实现类(就是实现接口方法的子类)可以继承多个接口的,多继承的优势就体现出来了。
作者: 280270738    时间: 2013-7-15 16:38
1、抽象类里面可以有非抽象方法但接口里只能有抽象方法 声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2