要了解Java中抽象类和接口之间的区别,重要的是首先要独立地理解它们中的每一个。 Java中的抽象类用于声明具有一组共同特征的子类。抽象类的常见用法是其他类的超类,实际上,它允许其扩展抽象类。在抽象类的声明中使用了抽象关键字。与其他任何类一样,抽象类具有描述该类可以执行的方法和特性的字段。仅通过声明抽象类,就无法启动该类
Java接口可以等同于协议。它代表一种预设的行为,可以促进不相关对象的交互。根据用户的不同,接口可以把握实现不同操作的关键。因此,该接口用作生产者和消费者之间的链接。因此,Java中的接口是一组包含可能具有常量声明的空主体的方法。在将类暴露给Java接口时,这意味着该类的预期行为是接口所有方法的实现。
差异性
首先,与接口中使用的static
和final
字段相反,抽象类允许使用非static
或final
字段。接口中不能使用任何实现代码,并且抽象类中可能会使用实现代码。在抽象类中推出的实现代码可以具有部分或全部实现的方法。默认情况下,该接口的所有方法均为“抽象”。
可见性对于抽象类的方法或成员也是可能的,这些方法或成员可以有所不同,例如:public,protected,private或none。另一方面,接口的可见性只能预设为一种可见性模式,即“public”。
抽象类将自动继承对象类。实际上,这意味着包括诸如clone()
和equals()
之类的方法。在接口中,无法继承对象类。在此之后,抽象类具有构造函数的能力,但是接口不能具有构造函数。
Java的接口在实现多个继承方面也具有非常重要的功能,因为一个类只能有一个超类。尽管只能存在一个超类,但可以在任意数量的接口中实现它。抽象类中不能有多个继承。
在性能上,与抽象类相反,接口的实现速度往往较慢,这主要是因为在类中查找相应方法的额外方向。但是,由于不断升级的现代Java虚拟机,差异变得越来越慢。
在接口中添加方法要求您跟踪实现特定接口的所有实现类。另外,可以扩展接口,以便允许它具有其他方法。如果碰巧要处理一个抽象类,则只需添加该方法的默认实现,代码即可继续运行。由于抽象类和接口之间存在差异,因此必须注意它们不是竞争对手,但本文中提到的差异可相互补充。
抽象类 | 接口 |
---|---|
abstract 关键字用于创建抽象类,并且可以与方法一起使用。 |
interface 关键字用于创建接口,但不能与方法一起使用。 |
一个类只能扩展一个抽象类。 | 一个类可以实现多个接口。 |
抽象类可以同时具有抽象方法和非抽象方法。 | 接口只能具有抽象方法。 |
默认情况下,变量不是final 。它可能包含非最终变量。 |
默认情况下,变量在接口中为final 。 |
抽象类可以提供接口的实现。 | 接口无法提供抽象类的实现。 |
它可以具有实现的方法。 | 它提供绝对抽象,并且不能具有方法实现。 |
它可以具有public , private , static 和 protected 的访问修饰符。 |
这些方法在Java接口中是隐式公共的,并且是抽象的。 |
它不支持多重继承。 | 它支持多种继承。 |
它是代码重用和演进角度的理想选择。 | 它是类型声明的理想选择。 |
总结
- 与具有
static
和final
表的接口相反,抽象类字段不是static
的或final
的。 - 实现代码不能在接口中使用,而可以在抽象类中使用。
- 接口的可见性只能是
public
的,而抽象类的可见性可以有所不同。 - 抽象类将自动继承对象类,但是在接口中是不能的。
- 在实现中,抽象类比接口要快。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java中抽象类和接口
本文链接:https://www.vsdiffer.com/vs/abstract-class-vs-interface-in-java.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。