Java中的抽象类和接口

Anonim

抽象类和接口都主要用于抽象,但它们彼此非常不同。两者都是Java的核心部分,但有自己的应用程序用途。虽然这两个术语可能彼此同义,但它们不能互换使用。

两者之间存在显着差异。虽然接口方法默认是抽象的,但抽象可以包含抽象和非抽象方法。好吧,从Java 8开始,接口也有方法实现,并且它们可以在Java中同时具有静态和默认方法。让我们详细研究两者之间的差异。

什么是Java中的抽象类?

Java中的抽象类是一个声明为抽象的类 - 它可能包含也可能不包含抽象方法。它与Java接口非常相似,只是它可以包含默认方法实现。与面向对象编程一样,Java中的抽象是使用抽象类和接口实现的。在Java中,抽象意味着从用户隐藏不相关的细节,只关注基本细节以提高效率,从而降低复杂性。关键字“abstract”用于在类声明中的class关键字之前创建一个抽象类。

抽象类可能包含也可能不包含抽象方法(没有主体的方法),但如果一个类至少有一个抽象方法,则必须将其声明为抽象方法。但是,非抽象方法也只能在抽象类中使用,但仅用于实现默认行为。抽象类中的方法可以具有访问修饰符,例如private,public,static和protected,具体取决于可见性级别。抽象类不能被实例化,并且它不能提供100%的抽象,因为它可以具有具体的方法。

什么是界面?

虽然界面看起来像一个类,但它不是。由于Java不支持多重继承,因此接口有时非常适合为类层次结构提供基础。接口更像是一个类的蓝图,它也用于实现Java中的抽象。它包含抽象方法和静态常量。简单来说,接口是抽象方法的集合,用于指定类必须实现的行为。与抽象类不同,接口在Java中提供完全抽象。它可以像方法一样拥有方法和变量,但是默认情况下,接口中声明的方法是抽象的。

Java中抽象类和接口的区别

  1. Java中抽象类和接口的“多重继承” - 尽管抽象类和接口主要用于抽象,但它们彼此完全不同。虽然抽象类是一个类,但接口是一个接口。这意味着虽然接口只能扩展另一个Java接口,但抽象类可以在Java中实现多个继承。好吧,Java不支持多重继承,但可以在Java中实现多个继承。
  2. Java中抽象类和接口的“方法类型” - 两者之间的第二个主要区别是,虽然接口只能有抽象方法,但抽象类可以同时具有抽象和非抽象方法。但是,从Java 8开始,接口也可以有默认和静态方法。
  3. Java中抽象类和接口的“访问修饰符” - 抽象类可以具有公共,私有和受保护的访问修饰符,但是接口的方法是隐式公共和抽象的。您不能使用任何其他访问修饰符和接口方法'。
  4. Java中抽象类和接口的“实现” - 抽象类可以提供接口的实现。另一方面,接口不能提供抽象类的实现。
  5. Java中抽象类和接口的“关键字” - 虽然“abstract”关键字用于将抽象类方法声明为抽象,但是,接口完全是一个不同的故事;它们只能有公共的,静态的最终常量和方法声明。
  6. Java中“抽象类和接口”的“使用” - 虽然接口是类型声明的理想选择,但抽象类最适合代码可重用性和进化视角。界面看起来像一个类,但它不是一个类。
  7. Java中抽象类和接口的“可靠性” - 抽象类和接口之间的另一个主要区别是前者比后者快一点,因为在Java中调用任何重写方法之前,搜索通常涉及接口。
  8. Java中抽象类和接口的“最终变量” - 默认情况下,接口中声明的变量是final,而抽象类可能包含也可能不包含非final变量。

Java中的抽象类与接口:比较表

抽象类 接口
Abstract关键字用于创建抽象类,它可以与方法一起使用。 Interface关键字用于创建接口,但不能与方法一起使用。
一个类只能扩展一个抽象类。 一个类可以实现多个接口。
抽象类可以同时具有抽象和非抽象方法。 接口只能有抽象方法。
变量默认不是最终的。它可能包含非最终变量。 默认情况下,变量在界面中是最终的。
抽象类可以提供接口的实现。 接口不能提供抽象类的实现。
它可以有实现方法。 它提供绝对抽象,不能有方法实现。
它可以具有公共,私有,静态和受保护的访问修饰符。 这些方法在Java接口中是隐式公共和抽象的。
它不支持多重继承。 它支持多种继承。
它是代码重用和进化视角的理想选择。 它是Type声明的理想选择。

Java中抽象类和接口的摘要

抽象类和接口都用于抽象;但是,他们有相同的差异。两者之间的主要区别在于抽象方法。虽然前者可能有也可能没有抽象方法,但后者是隐含抽象的。抽象类可以同时具有抽象和非抽象方法。另一方面,接口只能有抽象方法,因此它们不能具有实现,这仅仅意味着接口不能具有非抽象方法。无法实例化禁止创建对象的抽象类。另一方面,界面可能看起来像一个类,但事实并非如此。