黑马程序员技术交流社区

标题: 类和接口 [打印本页]

作者: 236gswqt    时间: 2014-6-29 14:11
标题: 类和接口
   抽象类和接口都可以包含抽象方法,那么它们有什么区别?使用时该如何选择?

作者: 陈鹏83    时间: 2014-6-29 15:06
重点:一个类最多只能有一个直接父类,包括抽象类;但是一个类可以直接实现多个接口通过实现多个接口可以弥补Java中的单继承的不足。

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

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

作者: 天,殇心    时间: 2014-6-29 18:37
抽象类与接口:
抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取,特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。
接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。

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

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


作者: 龙泉长空    时间: 2014-6-29 18:57
接口是为了以另一个安全的方法实现多继承.
作者: tangliping    时间: 2014-6-29 19:01
接口是一种特殊的抽象类
作者: 沐子松/kf    时间: 2014-6-29 19:12
抽象类里面的抽象方法与类主体联系更密切,接口只是某类行为的聚合体,鸟和飞机都具备飞的方法,所以可以定义一个"飞able"接口,而这是有个方法"煽翅膀飞()",这个方法是鸟类独有的飞的特性,所以这个方法要定义在鸟类这个抽象类里面,和鸟类保持紧密联系。
作者: 沐子松/kf    时间: 2014-6-29 19:15
抽象类是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定
作者: rekirt    时间: 2014-6-29 23:13
这个论坛里面有总结,你问题前不会先搜索一下,大哥,
作者: clf900630    时间: 2014-7-1 14:31
1.抽象类需要给继承.而且只能单继承. 接口需要被实现,而且可以多实现.
2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法.接口中只能定义抽象方法,必须由子类去实现.
3.抽象类的继承,是 is a 关系,在定义该体系的基本共性内容.'接口的实现是like a 关系,在定义体系额外功能.




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