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

这是最近在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

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

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

  1. 是否可以在最终课程中使用抽象方法?

    这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一. 即使他知道你 无法用Java将抽象类定型为final ,他对方法的措辞感到困惑. 答案很简单,不,在Ja ...

  2. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

  3. 在matlab中怎么录制音频_怎么录制淘宝页面中的视频?简单方法,轻松搞定

    原标题:怎么录制淘宝页面中的视频?简单方法,轻松搞定 怎么录制淘宝页面中的视频?当前足不出户,大家就可以在很多的电商平台购买到自己心仪的商品.这其中商机也就产生了,如果不太想上班,或者说想要自己当老板 ...

  4. 文章中嵌入代码块_如何在您的文章中嵌入多项选择测验问题

    文章中嵌入代码块 In my experience, supplementing study with practical exercises greatly improves my understa ...

  5. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  6. qt中实现左右分割线_一种快速刷新richedit中内嵌动画的方法的实现

    在IM中使用动画表情是一种非常有趣的方式,然而选择一种合适的方式来实现却并不容易. 一般来说,除了自己去实现一个富文本控件,目前主要的解决方案有3种: 1.使用浏览器做容器. 2.使用QT提供的Ric ...

  7. 在jmeter中怎么提取数据_如何使用JMeter从文件中提取数据

    在性能测试方面,重用响应数据至关重要.几乎(如果不是全部!)负载测试场景假设您: 从先前的响应中提取有趣的方面,并在下一个请求中重用它们(也称为相关) 确保实际响应符合预期(又称断言) 因此,如果您是 ...

  8. 从hbitmap中获取位图数据_如何快速从主流数据库中获取人/小鼠数据?

    点击上方"蓝色字体"关注我们 鹿明 生物 蛋白.代谢组学服务专家 关注我们收获更多 关注 随着生物科技的迅速发展,每天都会有海量的生物学数据产生,如何有效的分析这些"生物 ...

  9. 计算机教学中融入德育教育的思考与实践,信息技术课程中渗透德育教学的实践与反思...

    摘要:新课程标准下,信息技术课程以培养和提升学生的信息素养为根本教学目的,同时,还肩负着渗透德育教学工作的重任.信息技术教师在课程教学中应当通过开展时时处处渗透爱国主义教育.适时渗透孝敬父母和尊老爱幼 ...

最新文章

  1. 前深度学习时代CTR预估模型的演化之路:从LR到FFM\n
  2. poj 1741 Tree
  3. 【数据竞赛】AI在垃圾分类中的应用小侃(海华大赛获奖者系列分享一)
  4. cors解决ajax跨域
  5. 09.ws复杂数据类型数据传输
  6. 64位Ubuntu kylin 16.04显示CPU内存使用率
  7. JAVA 简单的抽奖程序
  8. Linux下更新libnss3的代码,yum安装firefox错误libnssutil3.s
  9. 开源.Net邮件服务器-LumiSoft Mail Server简介
  10. 网络安全与管理精讲视频笔记4-数字信封、数字签名、完整性验证、数据加解密及身份认证流程...
  11. linux版本信息以及x86与x86_64的区别
  12. Oracle商务智能系统(Oracle Business Intelligence System 11i )
  13. 如何设置浏览器标签图标
  14. Windows7双屏扩展及双屏桌面背景独立显示
  15. 大数量级组合数的快速计算方法
  16. 关于『数据结构』:图论
  17. 统计一组名字中每个姓出现的次数
  18. 校招详解(术语、时间、流程)
  19. Linux迁移home目录到根目录的操作步骤
  20. Vue elementUI-select多选下拉框数据回显成功后,点击下拉选项或删除回显数据无反应...

热门文章

  1. [ONTAK2010] Peaks加强版 (kruskal重构树+主席树+倍增)
  2. CF803G-Periodic RMQ Problem【离散化,线段树,ST表】
  3. CF204E-Little Elephant and Strings【广义SAM,线段树合并】
  4. 欢乐纪中A组赛【2019.8.23】
  5. 糊涂的教授(2015特长生 T3)
  6. 汇编语言(十三)之偶数转成哥德巴赫猜想
  7. JavaFX UI控件教程(七)之Checkbox
  8. JavaFX UI控件教程(三)之Label
  9. 架构师之路:从码农到架构师你差了哪些
  10. Spring MVC常用注解,你会几个?