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

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

差异性

首先,与接口中使用的staticfinal字段相反,抽象类允许使用非staticfinal字段。接口中不能使用任何实现代码,并且抽象类中可能会使用实现代码。在抽象类中推出的实现代码可以具有部分或全部实现的方法。默认情况下,该接口的所有方法均为“抽象”。

可见性对于抽象类的方法或成员也是可能的,这些方法或成员可以有所不同,例如:public,protected,private或none。另一方面,接口的可见性只能预设为一种可见性模式,即“public”。

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

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

在性能上,与抽象类相反,接口的实现速度往往较慢,这主要是因为在类中查找相应方法的额外方向。但是,由于不断升级的现代Java虚拟机,差异变得越来越慢。

在接口中添加方法要求您跟踪实现特定接口的所有实现类。另外,可以扩展接口,以便允许它具有其他方法。如果碰巧要处理一个抽象类,则只需添加该方法的默认实现,代码即可继续运行。由于抽象类和接口之间存在差异,因此必须注意它们不是竞争对手,但本文中提到的差异可相互补充。

抽象类 接口
abstract关键字用于创建抽象类,并且可以与方法一起使用。 interface关键字用于创建接口,但不能与方法一起使用。
一个类只能扩展一个抽象类。 一个类可以实现多个接口。
抽象类可以同时具有抽象方法和非抽象方法。 接口只能具有抽象方法。
默认情况下,变量不是final。它可能包含非最终变量。 默认情况下,变量在接口中为final
抽象类可以提供接口的实现。 接口无法提供抽象类的实现。
它可以具有实现的方法。 它提供绝对抽象,并且不能具有方法实现。
它可以具有public, private, staticprotected 的访问修饰符。 这些方法在Java接口中是隐式公共的,并且是抽象的。
它不支持多重继承。 它支持多种继承。
它是代码重用和演进角度的理想选择。 它是类型声明的理想选择。

总结

  1. 与具有staticfinal表的接口相反,抽象类字段不是static的或final的。
  2. 实现代码不能在接口中使用,而可以在抽象类中使用。
  3. 接口的可见性只能是public的,而抽象类的可见性可以有所不同。
  4. 抽象类将自动继承对象类,但是在接口中是不能的。
  5. 在实现中,抽象类比接口要快。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java中抽象类和接口
本文链接:https://www.vsdiffer.com/vs/abstract-class-vs-interface-in-java.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。