Java中的抽象类和抽象方法是什么? 我应该什么时候使用它? 附教程

已发表: 2019-09-12
java-abstract-class-tutorial-by-crunchify

几天前,我写了一篇关于 Java 基础知识的文章,内容是什么是 Java 中的接口以及如何使用它? 本教程还涉及基本的 Java 基础“ Abstract Class and Abstract Method ”。

什么是抽象类?

让我们先了解 Abstract 类,然后再看 Example。

  • 抽象类是声明为abstract的类
  • 抽象类不能被实例化
  • 抽象类可以被子类化
  • 它可能包含也可能不包含抽象方法
  • 当抽象类subclassed化时,子类通常为其父类中的所有抽象方法提供实现。
  • 如果子类不提供实现,那么子类也必须声明为abstract

这是一个非常basic Java Interview Question 。 可能是您在面试中遇到的1 st Java Interview Question

我可以在不添加抽象方法的情况下定义抽象类吗?

当然是的。 声明类抽象仅意味着您不允许它自己实例化。 非抽象类中不能有抽象方法。

什么是抽象方法?

  • abstract method是在没有实现的情况下声明的方法。
  • 它只有一个方法签名。

让我们从一个例子开始。 问题描述:

  1. 创建CrunchifyExam.java类,它有一个名为checkResult()的抽象方法
  2. 创建类Crunchify1stSchoolExamResult.java ,它扩展抽象类CrunchifyExam.java
  3. 创建类Crunchify2ndSchoolExamResult.java ,它扩展抽象类CrunchifyExam.java
  4. 现在以上两个类都必须提供 checkResult() 方法的实现
  5. 两所学校可能有自己不同的procedurenumber of checks来确定用户是PASSED or FAILED ,他们可以自由地拥有自己的checkResult()实现

Crunchify1stSchoolExamResult.java中扩展CrunchifyExam类后,Eclipse 将提示您实现CrunchifyExam.java中提到的抽象方法

实现抽象方法 - Crunchify 教程

Crunchify1 st SchoolExamResult.java

Crunchify2 nd SchoolExamResult.java

Eclipse 控制台结果:

只需右键单击Crunchify2ndSchoolExamResult.java并作为Java Application运行以查看以下结果。

现在你可能有一个问题

为什么我不能在这里使用接口而不是使用Abstract MethodClass并将 CrunchifyExam 作为接口?

好吧—— Sure you could ——但你还需要实现getExamTime ()、 setExamTime ()、 getExamTime ()、 setExamTime () 方法。

通过使用抽象类,您可以继承其他(非抽象)方法的实现。 你不能用接口做到这一点——接口cannot provide任何方法实现。

是否可以在 Java 中创建抽象类和最终类?

  • 抽象和最终是相互排斥的概念。
  • 所以答案是否定的,我们不能在 Java 中使抽象类或方法成为最终的。
  • final 类是完整的类,不能进一步扩展。
  • 抽象类称为不完整类,只能由其他具体类扩展,必须实现所有抽象方法。
  • 此外,没有办法,也不可能在最终类中有抽象方法。

是否可以从 Java 中的多个抽象类继承?

  • Java 不支持多重继承。
  • 在java中我们只能扩展一个类。
  • 在 Java 中,我们可以从许多来源实现接口。