抽象类与接口的区别.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:4 大小:46KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

抽象类与接口的区别.doc

抽象类与接口的区别.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

抽象类里面可以有非抽象方法但接口里只能有抽象方法声明方法的存在而不去实现它的类被叫做抽像类abstractclass它用于要创建一个体现某些基本行为的类并为该类声明方法但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一个变量其类型是一个抽像类并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract类的子类为它们父类中的所有抽像方法提供实现否则它们也是抽像类为。取而代之在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口interface是抽像类的变体。在接口中所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的没有一个有程序体。接口只可以定义staticfinal成员变量。接口的实现与子类相似除了该实现类不能从接口定义中继承行为。当类实现特殊接口时它定义即将程序体给予所有这种接口的方法。然后它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换instanceof运算符可以用来决定某对象的类是否实现了接口。详细解析Java中抽象类和接口的区别在Java语言中abstractclass和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在才赋予了Java强大的面向对象能力。abstractclass和interface之间在对于抽象类定义的支持方面具有很大的相似性甚至可以相互替换因此很多开发者在进行抽象类定义时对于abstractclass和interface的选择显得比较随意。其实两者之间还是有很大的区别的对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析试图给开发者提供一个在二者之间进行选择的依据。理解抽象类abstractclass和interface在Java语言中都是用来进行抽象类本文中的抽象类并非从abstractclass翻译而来它表示的是一个抽象体而abstractclass为Java语言中用于定义抽象类的一种方法请读者注意区分定义的那么什么是抽象类使用抽象类能为我们带来什么好处呢在面向对象的概念中我们知道所有的对象都是通过类来描绘的但是反过来却不是这样。并不是所有的类都是用来描绘对象的如果一个类中没有包含足够的信息来描绘一个具体的对象这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念是对一系列看上去不同但是本质上相同的具体概念的抽象。比如如果我们进行一个图形编辑软件的开发就会发现问题领域存在着圆、三角形这样一些具体概念它们是不同的但是它们又都属于形状这样一个概念形状这个概念在问题领域是不存在的它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念所以用以表征抽象概念的抽象类是不能够实例化的。在面向对象领域抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体因此它可以是不允许修改的同时通过从这个抽象体派生也可扩展此模块的行为功能。熟悉OCP的读者一定知道为了能够实现面向对象设计的一个最核心的原则OCPOpen-ClosedPrinciple抽象类是其中的关键所在。从语法定义层面看abstractclass和interface在语法层面Java语言对于abstractclass和interface给出了不同的定义方式下面以定义一个名为Demo的抽象类为例来说明这种不同。使用abstractclass的方式定义Demo抽象类的方式如下abstractclassDemoabstractvoidmethod1abstractvoidmethod2…使用interface的方式定义Demo抽象类的方式如下interfaceDemovoidmethod1voidmethod2…在abstractclass方式中Demo可以有自己的数据成员也可以有非abstract的成员方法而在interface方式的实现中Demo只能够有静态的不能被修改的数据成员也就是必须是staticfinal的不过在interface中一般不定义数据成员所有的成员方法都是abstract的。从某种意义上说interface是一种特殊形式的abstractclass。从编程的角度来看abstractclass和interface都可以用来实现designbycontract的思想。但是在具体的使用上面还是有一些区别的。首先abstract