Java中抽象类和接口的区别

Anonim

Java中的抽象类与接口

要理解抽象类和Java中的接口之间的差异,首先必须独立地理解这些中的每一个。 Java中的抽象类用于声明具有一组共同特征的子类。抽象类的常见用法是其他类的超类,实际上,它允许它扩展抽象类。抽象关键字用于抽象类的声明。就像任何其他类一样,抽象类具有描述类可以执行的方法和特征的字段。仅通过声明抽象类,就无法启动该类

Java接口可以等同于协议。它表示预设和商定的行为,允许促进不相关对象的交互。根据用户的不同,界面包含正在实施的不同操作的关键。因此,该接口充当生产者和消费者之间的链接。因此,Java中的接口是一组包含空体的方法,这些空体可以具有常量声明。在将类暴露给Java接口时,这意味着该类所期望的行为是接口的所有方法的实现。

差异

首先,抽象类允许非静态或最终的字段,而不是接口中使用的静态和最终字段。接口不能使用其中的任何实现代码,并且可能存在抽象类中使用的实现代码。在抽象类中推出的实现代码可以具有一些或所有实现的方法。默认情况下,接口的所有方法都是“抽象的”。

对于抽象类的方法或成员,可以看到可见性,例如public,protected,private或none。另一方面,界面的可见性只能预设为一种“公开”的可见性模式。

抽象类将自动继承对象类。实际上,这意味着包含了clone()和equals()等方法。在接口中,不可能继承对象类。在此之后,抽象类具有构造函数的能力,但是接口不能具有构造函数。

Java中的接口也具有非常重要的功能,可以实现多个继承,因为一个类只能有一个超类。虽然只能存在一个超类,但它可以在任意数量的接口中实现。在抽象类中不可能有多个继承。

在性能方面,接口往往在实现方面较慢而不是抽象类,这主要是由于在类中找到相应方法的额外方向。然而,由于不断升级的现代Java虚拟机,差异变得越来越慢。

在接口中添加方法需要您跟踪实现特定接口的所有实现类。或者,您可以扩展界面以允许它具有额外的方法。如果您正在处理抽象类,那么所需的只是添加方法的默认实现,代码继续运行。由于抽象类和接口之间存在差异,重要的是要注意它们不是竞争对手,但是这里提到的差异可以相互补充。

摘要

  1. 抽象类字段不是静态的或最终的,而不是具有静态和最终表的接口。

  2. 接口中不能使用任何实现代码,而可以在抽象类中使用。

  3. 界面可见性只能是公开的,而抽象类可见性可以变化。

  4. 抽象类将自动继承对象类,但在接口中不可能。

  5. 抽象类在实现中比接口更快。