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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘笑 中级黑马   /  2012-6-25 09:54  /  2706 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘笑 于 2012-6-26 17:52 编辑

接口:
定义接口的关键字: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黑马币 +20 收起 理由
黄奕豪 + 20 赞一个!

查看全部评分

3 个回复

倒序浏览
下面是我总结的,呵呵
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。

评分

参与人数 1黑马币 +10 收起 理由
黄奕豪 + 10 赞一个!

查看全部评分

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