黑马程序员技术交流社区
标题:
abstract class和interface有什么区别?
[打印本页]
作者:
HM周一帆
时间:
2013-3-30 21:11
标题:
abstract class和interface有什么区别?
本帖最后由 HM周一帆 于 2013-3-31 22:28 编辑
详细说下 谢谢
作者:
HM朱蛟
时间:
2013-3-30 21:16
楼主你好 这个是我学习的一点总结 希望对有有所帮助 有不对的地方请指出 一起学习
抽象类是啥?为何出现?怎么处理?
What:抽象类就是看不懂的类。
Why:情况:多个类中出现相同功能,但是功能主体不同。
How:这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。
接口(interface)是啥?:
接口:可以认为是一个特殊的抽象类,一般抽象类可以创建抽象和非抽象方法和成员,而接口里的成员则全部都是抽象的,换言之,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
抽象类的特点:
1:抽象方法一定在抽象类中。
2:抽象方法和抽象类都必须被abstract关键字修饰。
3:抽象类不可以用new创建对象。因为调用抽象方法没意义。
4:抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
5:如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。换句话说,若你不想成为抽象类,就必须得复写所有的方法。
接口使用注意事项?:
1:接口也需要子类来“继承”,只不过这种方式在接口身上的关系,称之为“实现”,implements。
2:接口不能创建对象,因为有抽象方法。
3:需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。
4:接口中的成员都是public的。
5:接口中常见定义:常量,抽象方法。
6:接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
------------------------------------------------------
百度网摘--接口和抽象类之间的区别?:
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
作者:
征途
时间:
2013-3-30 21:23
接口和抽象类的区别
接口中的方法全部是抽象方法,写法格式是固定的. 常量:public static final 方法:public abstract
抽象类中可以有普通方法
子类继承抽象类,直接使用抽象类中的非抽象方法
子类全部覆盖接口中的全部方法才能建立对象
抽象类是这个继承体系中的共性内容
接口是这个体系的扩展内容
继承是一个 is - a 关系,谁是谁的一种
接口是一个 like a 关系,看起来像谁
作者:
赵喜平
时间:
2013-3-30 22:13
抽象类定义了相似对象的基本功能, 而接口定义的是对象的扩展功能;
抽象类中可以有非抽象方法, 而接口中的方法都是抽象的,并且其方法默认的就是public abstract;
抽象类中只定义方法, 接口中可以定义变量和方法并且方法默认是public static final类型;
实现抽象类用继承, 接口用实现implements;
两者的共同点是要想实现抽象类或者接口,都需要实现其中的所有方法,否则其子类还是抽象的。
作者:
王_强
时间:
2013-3-30 23:30
接口和抽象类的定义类似、区别是:一个类实现接口、必须实现接口里的所有方法、而且一个类可以实现多个接口(相当于多继承)接口使用interface关键字、而抽象类使用的是abstract 关键字、一个类只能继承一次。继承抽象类的话、是可以不全部实现他的所有方法的。但是你可以重写他的方法
作者:
郭沐昌
时间:
2013-3-30 23:34
abstract 关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继
承的所有类型的一个接口函数,但目前尚没有对它进行任何形式的实现。”抽象方法也许只能在一个抽象类
里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方
法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相
当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通class 或
abstract class 中继承)。
出自 java 编程思想第四版 纯手打!
作者:
王俊杰
时间:
2013-3-31 19:29
本帖最后由 王俊杰 于 2013-3-31 19:34 编辑
我记得有人发过这个问题了
为了方便查看 我把我的回复贴在这儿吧~~
abstract class类中的方法不必是抽象的,就是说,一个抽象类可以不包含抽象方法。但是,包含了抽象方法的类必须是抽象的。
关于接口和抽象类的区别,楼上说的已经很详细了
我分析一下思路吧 从语法和应用两个方面分析
从语法上来看:
1.抽象类可以有构造方法,而
接口中不能有构造方法
。
2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的
3.抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的.
4.抽象类中可以包含静态方法,
接口中不能包含静态方法
5.抽象类中可以有普通成员变量,接口中没有普通成员变量
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
从应用上来看:
接口多在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用
“抽象类和接口的区别在于使用动机。
使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
”这句话引自 zhouyong0的专栏。
我想这才是它们本质意义上的差别吧
共同学习,共同进步!!!
作者:
杜加璇
时间:
2013-3-31 19:42
接口与抽象类的区别
1.抽象类是类,只能单继承 接口可以多实现
2.抽象类是继承 is关系 它描述的是基本功能
接口是实现 like 它描述的是扩展功能
3.抽象类中可以存在非抽象的方法
接口中的方法必须全是抽象的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2