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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 236gswqt 中级黑马   /  2014-6-29 14:11  /  1749 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   抽象类和接口都可以包含抽象方法,那么它们有什么区别?使用时该如何选择?

9 个回复

倒序浏览
重点:一个类最多只能有一个直接父类,包括抽象类;但是一个类可以直接实现多个接口通过实现多个接口可以弥补Java中的单继承的不足。

相同点:
(1)接口和抽象了都不能被实例化,它们都位于继承树的顶端,用于被其他的类实现和继承。
(2)接口和抽象类都是可以包含抽象方法的,实现接口或是继承抽象类的普通子类都必须实现这些抽象方法。
不同点:
(1)接口只能包含抽象方法,不能包含已经提供实现的方法;抽象类则完全可以包含普通的方法
(2)接口不能定义静态方法;抽象类完全可以定义静态方法。
(3)接口中只能定义静态常量Field,不能定义普通的Field;抽象类既可以定义普通的Field也能定义静态常量Field
(4)接口不能包含构造器;抽象类中可以包含构造器,抽象类中的构造器并不是用于创建对象的,而是让其子类调用这些构造器来完成抽象类的初始化操作。
(5)接口里面不能够包含初始化块;但是抽象类里面则完全可以包含初始化块
(6)一个类最多只能有一个直接父类,包括抽象类;但是一个类可以直接实现多个接口,通过实现多个接口可以弥补Java中的单继承的不足。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
理解时可以把接口当成一个特殊的抽象类;

1、抽象类里面不仅可以定义抽象方法;还可以定义特定的方法;而接口只能定义抽象方法,供实现类实现;
2、抽象类可以被抽象类继承还可以被普通类继承,但继承只能是单继承(C++里面可以进行对继承);为了弥补Java中的这种不足。提出了接口;接口可以被多个类实现(多实现),拓展了Java的灵活性;

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
抽象类与接口:
抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取,特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。
接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。

抽象类和接口的共性:都是不断向上抽取的结果。

抽象类和接口的区别:
1:抽象类只能被继承,而且只能单继承。
    接口需要被实现,而且可以多实现。
2:抽象类中可以定义非抽象方法,子类可以直接继承使用。
   接口中都有抽象方法,需要子类去实现。
3:抽象类使用的是  is a 关系。
   接口使用的 like a 关系。
4:抽象类的成员修饰符可以自定义。
   接口中的成员修饰符是固定的。全都是public的。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
接口是为了以另一个安全的方法实现多继承.
回复 使用道具 举报
tangliping 来自手机 中级黑马 2014-6-29 19:01:21
地板
接口是一种特殊的抽象类
回复 使用道具 举报
抽象类里面的抽象方法与类主体联系更密切,接口只是某类行为的聚合体,鸟和飞机都具备飞的方法,所以可以定义一个"飞able"接口,而这是有个方法"煽翅膀飞()",这个方法是鸟类独有的飞的特性,所以这个方法要定义在鸟类这个抽象类里面,和鸟类保持紧密联系。
回复 使用道具 举报
抽象类是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定
回复 使用道具 举报
rekirt 中级黑马 2014-6-29 23:13:33
9#
这个论坛里面有总结,你问题前不会先搜索一下,大哥,
回复 使用道具 举报
1.抽象类需要给继承.而且只能单继承. 接口需要被实现,而且可以多实现.
2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法.接口中只能定义抽象方法,必须由子类去实现.
3.抽象类的继承,是 is a 关系,在定义该体系的基本共性内容.'接口的实现是like a 关系,在定义体系额外功能.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马