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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄锋 黑马帝   /  2011-10-14 08:53  /  3107 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract class和interface有什么区别?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
敖东 黑马帝 2011-10-14 09:06:37
沙发
含有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技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

回复 使用道具 举报
杨杰 黑马帝 2011-10-14 09:56:15
藤椅
本帖最后由 杨杰 于 2011-10-14 10:00 编辑

http://topic.csdn.net/u/20070118/00/bd2d32bb-fef6-412d-a4f5-c1d1c58f650e.html
这里更详细

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
   1.interface被继承时用的关键字是implements,而且可以同时implements多个interface,而abstract class被继承时用的关键字是extends,而且只能同时extends一个abstract class。
  2.interface内定义的方法都是public的,而abstract class内的则不一定。
  3.interface内定义的成员对象都是static & final的,而abstract class不是(一定不能是final)
   4.interface的方法不能有默认实现,只有一个声明,而abstract class内声明abstract的方法不能有实现,非声明abstract的方法可以有默认实现。
  5.interface被implements时,所有方法都必须被实现,必须申明是public的,而abstract class被extends时只有abstract的方法才必须被实现,别的有默认实现的直接被继承过来。

注:不能创建接口或抽象类的实例。

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
刘浩 黑马帝 2011-10-14 10:43:45
报纸
1.abstract class是抽象类,需要被继承。
  interface  是接口,需要被实现。

2.抽象类可以定义抽象和非抽象方法,子而立可以继承过来并直接使用。
接口中全都是抽象方法。只能被子类去实现。

3.抽象类中只能单继承。
  接口可以多实现。

4.继承关系是所属关系(比如:是A)
接口是(像A)的关系。

5.抽象类中定义的是一个体系中的共性基本功能。
  接口中定义的是扩展功能。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
724681149 黑马帝 2011-10-15 00:58:48
7#
      简而言之,abstract中包含了interfac,也就是abstract中包含了为实现的方法,没有方法体,这个为实现的方法需要子类来实现。interface的存在意义就是程序功能的扩展。interface类内都是为实现的方法,无方法体。abstract类内部包括未实现的接口和有方法体的一般的方法。
     “不知道,你明白了吗?我是明白了!”{:soso_e120:}。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

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

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
本帖最后由 吴限量 于 2011-10-16 20:43 编辑

abstarct class 和Interface是Java语言中对于抽象类定义进行支持的两种机制.他们共同赋予了Java强大的面向对象能力.
最明显的区别就是编码.
abstarct class Demo
{
    abstract void one();
    abstract void two();
}
interface Demo
{
    void one();
    void two();
}
在abstarct class 方式中.Demo可以有自己的数据成员,也可以有非abstarct的成员方法.而interface方法中,Demo只能够静态的不能修改的数据成员.

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
陈林阳 黑马帝 2011-10-17 20:07:40
10#
接口中变量都是用public static final 修饰的  函数都是public abstrict修饰的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马