接口(interface)和java中的抽象类(abstract class in java)的区别

java、C++、C语言都是复杂的编程语言,需要详细的研究和理解才能使用。这些语言中使用了许多不同的方法来决定语言的工作方式。接口和抽象类是OOP(面向对象编程)中两个混淆的概念。这两者可以单独使用,也可以一起使用。这两者完全不同,用于不同的情况。...
关键区别:接口或协议是允许不相关对象相互通信的常用方式。它表示一种约定的行为,有助于两个对象之间的交互。抽象类是无法实例化或设置对象实例的对象类。此类可能没有实现,或者实现不完整。

java、C++、C语言都是复杂的编程语言,需要详细的研究和理解才能使用。这些语言中使用了许多不同的方法来决定语言的工作方式。接口和抽象类是OOP(面向对象编程)中两个混淆的概念。这两者可以单独使用,也可以一起使用。这两者完全不同,用于不同的情况。

接口(interface)和java中的抽象类(abstract class in java)的区别

Java是一种编程语言,受到了C语言的影响。它从C和C++中派生出许多语法,但是它的低层次的设施比任何一个都要低。Java是一种通用编程语言,与以前的语言相比,它的实现依赖性更少。它是并发的、基于类的、面向对象的语言。

Java是由Sun Microsystems的James Gosling开发的,于1995年发布,最初是作为Sun Microsystems Java平台的核心组件发布的。Sun在GNU通用公共许可证下重新许可了大部分Java技术。这意味着所有在GNU通用公共许可下许可的技术都是开源的,并且通常是免费的。太阳微系统公司最终并入甲骨文公司。截至2012年,Java已经成为最流行的编程语言之一。对于客户机-服务器web应用程序尤其如此。许多其他系统已经开发了Sun技术的替代实现,例如GNU Compiler for Java和GNU Classpath。

接口或协议是允许不相关对象相互通信的常用方式。它表示一种约定的行为,有助于两个对象之间的交互。接口持有实现的各种操作的键,并充当两个不同对象之间的链接。如果一个对象类向接口公开,则该类必须遵循接口实现的行为。通常,接口只包含常量声明和方法签名。实现特定接口的任何接口都必须应用接口中提到的所有方法或声明为抽象类。在Java中,任何对象都可以定义为接口,如果该对象为null或包含实现该特定接口的类。可以使用implement关键字实现Java中单个类的多个接口。

接口(interface)和java中的抽象类(abstract class in java)的区别

抽象类是无法实例化或设置对象实例的对象类。此类可能没有实现,或者实现不完整。它还可以具有所有子类共享的抽象方法或属性。在某些编程语言中,没有实现的抽象类型称为接口。在Java中,可以使用类定义中的关键字“abstract”创建抽象类型。使用抽象类来放置所有未在抽象类中实现的方法,并将其留给子类来确定如何实现这些类的目的。如果一个类有一个抽象方法,则必须将该类声明为一个抽象类,尽管不需要至少有一个方法来声明一个抽象类。

Malliktalksjava.in列出了接口和抽象之间的主要区别:

  • 抽象类有构造函数,但接口没有。
  • 抽象类可以为其某些成员(方法)实现,但接口不能为其任何成员实现。
  • 抽象类应该有其他无用的子类。
  • 接口必须有其他类的实现,否则将是无用的
  • 只有一个接口可以扩展另一个接口,但任何类都可以扩展抽象类。
  • 默认情况下,接口中的所有变量都是final
  • 接口提供了一种多重继承的形式。一个类只能扩展另一个类。
  • 接口仅限于公共方法和常量,没有实现。抽象类可以有部分实现、受保护的部分、静态方法等。
  • 一个类可以实现几个接口。但是对于抽象类,一个类只能扩展一个抽象类。
  • 接口很慢,因为它需要额外的间接寻址才能在实际类中找到相应的方法。抽象类速度很快。
  • 抽象类允许使用可访问性修饰符(Public/Private/internal)。接口不允许辅助功能修饰符
  • 抽象类可以包含完整或不完整的方法。接口只能包含方法的签名,不能包含正文。因此,抽象类可以实现方法,而接口不能实现方法。
  • 抽象类可以包含字段、构造函数或析构函数并实现属性。接口不能包含字段、构造函数或析构函数,并且它只有属性的签名,但没有实现。
  • 各种访问修饰符,如抽象、受保护、内部、公共、虚拟等,在抽象类中有用,但在接口中却不有用。
  • 抽象范围由派生类决定。
  • 接口作用域可扩展到其继承链的任何级别。

表格信息由codeproject.com和mindprod.com提供

 

接口 抽象类
多重继承 一个类可以继承多个接口。 一个类只能继承一个抽象类。
默认实现 接口不能提供任何代码,只能提供签名。 抽象类可以提供完整的默认代码和/或只提供必须重写的详细信息。
访问修改函数 接口不能有sub、函数、属性等的访问修饰符一切都假定为公共的。 抽象类可以包含子类、函数和属性的访问修饰符。
核心与外围 接口用于定义类的外围功能。换句话说,人和车辆都可以从IMovable接口继承。 抽象类定义了类的核心标识,在那里它用于相同类型的对象。
同质性 如果各种实现只共享方法签名,那么最好使用接口。 如果不同的实现是同一类型的,并且使用共同的行为或状态,那么最好使用抽象类。
速度 在相应的类中查找实际方法需要更多的时间。
添加功能 如果我们向一个接口添加一个新方法,那么我们必须跟踪接口的所有实现,并为新方法定义实现。 如果我们将一个新方法添加到一个抽象类中,那么我们可以选择提供默认实现,因此所有现有代码都可以正常工作。
字段和常量 接口中不能定义任何字段。 抽象类可以定义字段和常量。
简洁 接口中的常量声明都假定为公共静态final。 共享代码可以添加到抽象类中。
常量 仅静态最终常量,可以在实现接口的类中使用它们而无需限定。 实例常量和静态常量都是可能的。静态和实例初始化程序代码也可以计算常量。
第三方便利 接口实现可以添加到任何现有的第三方类中。 必须重写第三方类以仅从抽象类扩展。
能做还是能做 接口通常用来描述类的外围功能,而不是它的中心标识,例如汽车类可能实现可循环使用的接口,该接口可以应用于许多其他完全无关的对象。 抽象类定义其子类的核心标识。实现的接口枚举类可以做的一般事情,而不是类本身。在Java上下文中,用户通常应该实现可运行的接口,而不是扩展线程,因为他们对提供一些新的线程功能并不感兴趣,他们通常只希望一些代码能够独立运行。他们想要创建一些可以在线程中运行的东西,而不是一种新的线程。当你决定继承或委派时,类似的is-a与has-a的争论也会出现。
插件 用户可以为一个接口编写一个新的替换模块,该接口不包含与现有实现相同的代码。当用户实现该接口时,它们从零开始,没有任何默认实现。用户必须从其他类获得工具;除了一些常量之外,接口中没有其他东西。这给了用户实现完全不同的内部设计的自由。 用户必须按原样使用抽象类作为代码基,包括它的所有附带行李,不管是好是坏。抽象类作者将结构强加给用户。
维护 如果客户机代码仅以接口的形式进行会话,那么可以使用工厂方法轻松地更改其背后的具体实现。 如果客户机代码仅以抽象类的形式进行会话,则可以使用工厂方法轻松地更改其背后的具体实现。

  • 发表于 2021-07-13 06:41
  • 阅读 ( 217 )
  • 分类:通用

你可能感兴趣的文章

包裹(package)和java接口(interface in java)的区别

Java中的Package和Interface的主要区别在于,Package有助于对类进行有条理的分类以方便访问和维护,而Interface则有助于实现多个继承和实现抽象。 Java是最流行的编程语言之一。Java的主要优点是它支持面向对象编程。这种方法允...

  • 发布于 2020-10-18 11:01
  • 阅读 ( 570 )

班(class)和接口(interface)的区别

班(class)和接口(interface)的区别 面向对象编程(OOP)是软件开发中的一种常见范式。它有助于使用类和对象为编程带来真实的场景。类是创建对象的蓝图。程序员可以用属性和方法创建一个类。学生和老师是客体。创建对象称...

  • 发布于 2020-10-24 04:25
  • 阅读 ( 258 )

继承(inheritance)和java接口(interface in java)的区别

继承(inheritance)和java接口(interface in java)的区别 Java是Sun Microsystems公司开发的一种编程语言。Java可以用来开发各种应用程序。它是一种支持面向对象、结构化等多种范式的语言,Java的主要优点是支持面向对象编程(OOP)。程序...

  • 发布于 2020-10-25 00:02
  • 阅读 ( 492 )

入门时应学习的10个核心java概念

... public interface List { public void add(Object obj); public Object get(int index); public void remove(int index);} ...

  • 发布于 2021-03-13 05:33
  • 阅读 ( 244 )

抽象类(abstract class)和c中的接口#(interface in c#)的区别

...。它们看起来很像接口,但增加了功能。 什么是接口(an interface)? 另一方面,接口不是只包含功能签名的类。这是一个没有实现的模式。从概念上讲,它只是包含成员声明的方法定义。它是一个空shell,不包含其成员的实现。...

  • 发布于 2021-06-25 03:34
  • 阅读 ( 355 )

抽象类(abstract class)和java接口(interface in java)的区别

...供100%的抽象,因为它可以有具体的方法。 什么是接口(an interface)? 接口虽然看起来像一个类,但实际上不是。因为Java不支持多继承,所以接口有时非常适合为类层次结构提供基础。接口更像是类的蓝图,在Java中也用于实现抽...

  • 发布于 2021-06-25 03:52
  • 阅读 ( 302 )

数据抽象(data abstraction)和封装(encapsulation)的区别

...键术语 数据抽象、封装、面向对象 什么是数据抽象(data abstraction)? 数据抽象是指隐藏内部细节,只显示功能。换句话说,它隐藏了实现细节,只是向外界展示了特性。一个现实世界的例子是电视。用户不需要知道内部电子电...

  • 发布于 2021-06-30 17:01
  • 阅读 ( 1217 )

应用程序编程接口(api)和java框架(framework in java)的区别

...framework的主要区别在于,javaapi是一组封装功能的组件的接口,而framework是一组帮助开发项目的类、工具和相关组件。 javaapi是一组用于构建软件的子例程定义、通信协议和工具。API的使用和实现包含在其文档中。Java框架提供了...

  • 发布于 2021-07-01 01:02
  • 阅读 ( 540 )

工厂模式(factory pattern)和抽象工厂模式(abstract factory pattern)的区别

...口引用新创建的对象。请参阅下面的程序。 Figure 1: Shape Interface Figure 2: Rectangle Class Figure 3: Square class Figure 4: Circle class Figure 5: ShapeFactory class Figure 6: Main class Shape接口有一个名为draw的抽象方法。矩形、正方形和圆形是类。它们实...

  • 发布于 2021-07-01 06:13
  • 阅读 ( 188 )

包裹(package)和接口(interface)的区别

...st”,则import语句如下所示。 导入测试。*; 什么是接口(interface)? 接口是实现抽象和多重继承的机制。接口中的方法是抽象方法。这些方法没有任何实现。它也可以有变量或字段。它们可以是公共的、静态的或最终的。此外,...

  • 发布于 2021-07-01 09:47
  • 阅读 ( 351 )
Chambray丶
Chambray丶

0 篇文章

相关推荐