在抽象类中可以没有抽象方法_是否可以在最终课程中使用抽象方法?

在抽象类中可以没有抽象方法

这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你
无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不,在Java的最终类中不可能有抽象方法。 为什么? 因为一旦在Java类中声明抽象方法,该类就会自动变为抽象类,并且您无法像前面所讨论的那样在Java中将抽象类定为final ,因此,在Java的final类中不可能有抽象方法。

正如我说过的那样,许多Java程序员对这个问题的措辞感到困惑,就像我说的那样,即使是被问到这个问题的读者也很熟悉这个概念,他并没有意识到,只要您在其中声明了一个抽象方法就可以了。一个类,它将成为一个抽象类,并且不可能在Java中将抽象类定型为final。

这是一条丢失的信息,或者您称其为把它与更流行和常见的问题分开的把戏,是否可以在Java中声明一个抽象类和final类

让我们看一个代码示例,以证明这一点,即您无法在最终类中声明抽象方法。 我们有一个名为Hello的公共最终类,该类中有一个名为print()的抽象方法。
Hello.java文件。

public final class Hello {

  public abstract print();

}

在Eclipse IDE中键入该命令后,将立即收到以下错误消息:

Hello类型必须是抽象类才能定义抽象方法

这是另一个屏幕快照,显示您在Java的最终类中不能拥有抽象方法:

当您在记事本中写下此代码并从命令行窗口使用javac对其进行编译时 ,情况也是如此。 根据Java规范,一旦在类中声明了抽象方法,该方法便自动成为抽象类,并且由于无法在Java中将抽象类定型为最终类,因此编译器将引发错误。

Java中的顶级类或嵌套类均是如此。 即使在嵌套的最终类上声明抽象方法 ,您也会收到相同的错误。

关于此主题的另一个后续问题是,抽象类可以在Java中具有静态方法吗? 答案是肯定的,在Java中的抽象类中声明静态方法没有问题,因为您无需实例化类即可使用静态方法,只需使用类名即可调用它们。

我们可以修改代码示例,使其在Hello类中包括main()方法 ,该类是Java中的静态方法,如下所示:

public abstract class Hello {

  public abstract void print();

  public static void main(String args[]) {
     .. some code here
  }

}

您可以看到没有编译时错误。 代码可以很好地编译,因此在Java 抽象类中声明静态方法是完全可以的。

这就是关于是否可以在最终类中使用抽象方法的全部内容 正如我说的那样,这是不可能的,因为一旦您在类内部创建了抽象方法,按照Java规范,该类就会自动成为抽象类。 由于您无法使用Java将最终类抽象化,因此这变得非法,并且编译器会通过抛出错误来禁止这样做。 但是,是的,您可以在最终类和抽象类上都声明静态方法,这没有问题。 如果您正在学习Java,建议您进一步阅读
不耐烦的Core Java让您熟悉诸如抽象和最终类之类的核心概念。 它还涵盖了Java 8。

其他相关Java面试问题的练习

  1. 抽象类可以在Java中具有构造函数吗? ( 回答
  2. 您可以在Java中覆盖静态方法吗? ( 回答
  3. 您可以重载Java中的静态方法吗? ( 回答
  4. 您可以在Java中运行没有main()方法的程序吗? ( 回答
  5. 您可以覆盖Java中的私有方法吗? ( 回答
  6. 您可以重载和覆盖Java中的main()方法吗? ( 回答
  7. 您可以在Java中使数组易变吗? ( 回答
  8. 您可以在Java中声明一个静态类吗? ( 回答

进一步阅读

Java编程面试公开

Head First Java第二版

感谢您阅读本文,如果您喜欢这个核心Java面试问题和我的解释,请与您的朋友和同事分享。

翻译自: https://www.javacodegeeks.com/2017/07/possible-abstract-method-final-class.html

在抽象类中可以没有抽象方法

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值