JavaRush /Java 博客 /Random-ZH /问答:是否可以在final类中定义抽象方法?

问答:是否可以在final类中定义抽象方法?

已在 Random-ZH 群组中发布
我的一位读者在 Java 开发人员职位的电话面试中被问到了这个有趣且重要的问题。尽管他知道用Java语言不可能制作一个抽象类final,但他对问题的措辞感到困惑。答案很简单:不, final类中不能有抽象方法。为什么?因为一旦你在Java语言类中声明了抽象方法,这个类就自动变成抽象的,而final你不能在Java语言中创建抽象类。final这意味着 Java 类中不能有 抽象方法。
问答:是否可以在final类中定义抽象方法? - 1
许多 Java 开发人员在回答这个问题时会因为措辞而感到困惑。即使提出问题的人熟悉一般概念,他也可能没有意识到一个类在其中声明了抽象方法后就变成了抽象,并且在Java中不能创建抽象类final。这一点将这个问题与更常见和常见的问题区分开来:在Java中是否可以同时将一个类声明为abstract和final? 让我们看一个示例代码来演示final不可能在类中声明抽象方法。让Hello.java我们有public final一个名为 的类Hello,它有一个抽象方法print()
public final class Hello {
  public abstract void print();
}
在IDE中键入此代码,您将收到以下错误消息,他们说它Hello必须是抽象类,以便可以在其中声明抽象方法。
问答:是否可以在final类中定义抽象方法? - 2
问答:是否可以在final类中定义抽象方法? - 3
如果您在记事本中键入此代码并从命令行使用 javac 实用程序对其进行编译,也会发生同样的情况。根据Java规范,一旦在类中声明了抽象方法,该类就成为抽象类,并且由于final在Java中不能创建抽象类,因此编译器将生成错误。对于 Java 语言中的顶级类和嵌套类都是如此。即使您在嵌套final类中声明抽象方法,错误也会是相同的。另一个相关问题是:Java中的抽象类可以有静态方法吗? 答案:是的,可以,在抽象类中声明静态方法没有问题,因为使用静态方法不需要创建类的实例,只需使用类名即可调用它们。我们可以修改示例以在类中包含Hello一个方法main(),该方法在 Java 中是静态的,如下所示:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
如您所见,没有抛出编译错误。这段代码编译没有问题,因为在 Java 中你可以完全安全地在抽象类中声明静态方法。 简要结论final类中声明抽象方法是不可能的。因为一旦你这样做了,根据 Java 规范,类就会自动变成抽象的。由于finalJava中的类不能是抽象的,这是不可接受的,编译器将通过抛出错误来禁止你这样做。但是你可以在final类和抽象类中声明静态方法,这没有问题。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION