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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱峁 中级黑马   /  2012-12-2 16:41  /  2047 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口和抽象类的区别?我不要大概的,我要详细的区别

5 个回复

倒序浏览
有几点区别:
1.两者的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,是“行为要按照接口来完成”。
2.抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口,其中所定义的方法都不能给出实现部分。
3.继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。
4.在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。



评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
接口:
定义接口的关键字:interface。实现接口的关键字:implements。
    接口:是一些方法特征的集合。它定义的是一组功能(方法)规则。
    作用:在不同事物(类)中抽象出共同功能点(方法),形成一组公开的功能规则(接口)
          来制约某些事物(类)的功能实现。换句话说:接口就是对类的功能(方法)抽象。
    特点:
    1. 不能够被实例化
    2. 接口中的成员自动设为public
    3. 接口中不能够出现方法体的实现
    4. 接口中的属性全为静态常量
    5. 实现某个接口的类,必须实现其中所有的方法
    6. 类可以实现多个接口
    7. 接口可以继承接口

抽象类:
使用abstract定义抽象类
抽象类不能实例化
抽象类中的方法可以实现也可以不实现,可以全部实现,也可以全部不实现
抽象类只能作为父类使用
在以下情况下,某个类将成为抽象类
a) 当一个类的一个或多个方法为抽象方法时
b) 当一个类是一个抽象类的子类,并且至少有一个抽象方法没有实现时
c) 当一个类实现一个接口,并且至少有一个接口方法没有实现时。



【接口与抽象类的区别】

1、接口是公开(public)的,里面不能有私有的方法或变量,是用于让别人使用的,实现接口的一定要实现接口里定义的所有方法。
2、一个类却可以实现多个interface(java中实现多重继承的方法之一)。
3、而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),而且所有的成员方法都是抽象的。
4、interface表示的是"like-a"关系。(组合是"has a"关系)
5、接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
=========================================================================================
1、而抽象类是可以有私有方法或私有变量的,实现抽象类可以有选择地重写需要用到的方法,但是必须实现里面所有的抽象方法。
2、抽象类在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
3、抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。
4、抽象类和接口所反映出的设计理念不同。其实abstract class表示的是"is-a"关系
5、抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

注:一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。不是很建议具体类直接实现接口的。还有一种设计模式是面向接口编程,而非面向实现编程。
其实接口是抽象类的延伸,可以将它看做是纯粹的抽象类,就是说接口比抽象类还抽象,还有设计接口的目的就是为了实现C++中的多重继承

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
接口和抽象类的异同.
                类似之处:  
•        抽象类和接口都包含可以有派生类继承的成员.
•        接口和抽象类都不能直接实例化, 但可以声明他们的变量.
•        可以使用多态性把继承于这两种类型的对象指定给他们的变量, 通过这些变量来使用这些类型的成员. 不能直接访问派生类对象的其他成员.

                区别:
•        派生类只能继承一个基类, 即只能直接继承一个抽象类(但可以使用一个继承链包含多个抽象类).   相反, 类可以使用任意多个接口.
•        抽象类可以拥有抽象成员(没有代码体, 必须在派生类中实现, 否则派生类本身必须也是抽象的), 和非抽象成员(他们拥有代码体, 也可以是虚拟的, 这样就可以在派生类中重写).
•        接口成员必须都在使用接口的类上实现----他们没有代码体, 另外, 按照定义, 接口成员是公共的, 但抽象的成员可以是私有的(只要他们不是抽象的), 受保护的, 内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问).
•        接口不能包含字段, 构造函数, 析构函数, 静态成员或常量.


                这说明这两种类型用于完全不同的目的.

抽象类主要用作对象系列的基类, 共享某些主要特性, 例如共同的目的和结构.

接口则主要用于类, 这些类在基础水平上有所不同, 但仍可以完成某些相同的任务

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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