整理好了!2024年最常见 100 道 Java基础面试题(三十六)

上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(三十五)-CSDN博客

七十一、抽象类必须要有抽象方法吗?

抽象类不必须包含抽象方法。抽象类是使用 abstract 关键字声明的类,它的主要目的是作为其他类的基类,提供一个通用的模板。抽象类可以包含以下类型的成员:

  1. 抽象方法:没有方法体的方法,只是声明。抽象类中的抽象方法必须由继承该抽象类的非抽象子类实现。

  2. 具体方法:具有实现体的方法。抽象类可以包含具体方法,这些方法可以被子类直接继承并使用,也可以被子类重写以提供不同的实现。

  3. 静态成员:包括静态变量和静态方法。抽象类可以包含静态成员,它们属于类本身,而不是类的任何特定实例。

  4. 常量:通常声明为 static final,它们是类级别的不变值。

  5. 成员变量:抽象类可以包含实例变量,这些变量可以是普通变量,也可以是静态变量。

抽象类的主要目的是提供一个部分实现,强制其子类实现某些方法,以确保子类遵循特定的协议。即使抽象类中没有抽象方法,它仍然可以作为其他类的基类,提供一些通用的属性和具体方法。

示例

public abstract class Animal {private String name;public Animal(String name) {this.name = name;}public String getName() {return name;}public abstract void makeSound(); // 抽象方法public void eat() { // 具体方法System.out.println(name + " is eating.");}
}public class Dog extends Animal {public Dog(String name) {super(name); // 调用父类的构造方法}@Overridepublic void makeSound() { // 实现抽象方法System.out.println(getName() + " says: Bark");}
}// 使用抽象类
Dog dog = new Dog("Buddy");
dog.eat(); // 使用继承的具体方法
dog.makeSound(); // 使用实现的抽象方法

在这个示例中,Animal 是一个抽象类,它有一个抽象方法 makeSound() 和一个具体方法 eat()Dog 类继承自 Animal 并实现了 makeSound() 方法。

注意事项

  • 包含抽象方法的类必须是抽象类。
  • 抽象类可以没有抽象方法,但如果你选择让一个类成为抽象类,通常是因为它打算包含一些抽象方法。
  • 抽象类不能被实例化,但可以被继承。

总结

抽象类不一定需要包含抽象方法。它们可以包含抽象方法、具体方法、静态成员和成员变量,以提供一个通用的模板供其他类继承。抽象类的主要目的是提供一个部分实现的框架,强制其子类实现某些方法,确保它们遵循特定的协议。

七十二、抽象类能使用 final 修饰吗?

在Java中,final关键字有两层含义,它可以用来修饰类,也可以修饰方法。当final用于修饰类时,它意味着该类不能被继承,即没有其他类可以从这个类派生出子类。

使用final修饰类

  1. 不可继承:将类声明为final意味着没有其他类能够继承这个类。这通常是因为该类提供了完整的功能实现,或者设计者不希望开发者改变其行为。

  2. 类的行为固定final类的所有方法都被视为隐式地是final方法,即它们不能被子类重写。

  3. 性能优化:由于final类不能被继承,这有助于JVM和编译器进行一些优化,因为它们知道这个类不会有任何子类。

使用final修饰方法

  1. 不可重写:将方法声明为final意味着该方法不能被子类重写。

  2. 实现固定final方法确保了所有继承类使用相同的实现,这在一些特定场景下非常有用,比如实现不可变类时。

抽象类和final的组合

虽然技术上可以将final与抽象类结合使用,但这在逻辑上是矛盾的:

  • 抽象类:设计为被继承的,它包含一个或多个抽象方法,需要子类来提供实现。
  • final:设计为不可被继承的,阻止了任何继承行为。

因此,将final与抽象类结合使用是没有意义的,因为抽象类就是为了继承而设计的,而final关键字却阻止了继承。在实际编程中,通常不会看到final abstract类,因为这两个概念本质上是相反的。

示例

public abstract class FinalAbstractClass { // 逻辑上不合理的组合public final void someMethod() {// 方法体}public abstract void anotherMethod();
}// FinalAbstractClass不能被实例化
// FinalAbstractClass obj = new FinalAbstractClass(); // 编译错误// 也不能被继承,除非子类提供一个anotherMethod的实现
public class SomeConcreteClass extends FinalAbstractClass {@Overridepublic void anotherMethod() {// 方法实现}
}// 子类不能重写final方法
// @Override
// public void someMethod() {// 这将导致编译错误
// }

在这个示例中,尽管技术上可以在抽象类中包含final方法,但整个类被声明为final是没有意义的,因为它阻止了类的继承,而抽象类的目的正是为了被继承。

总结

虽然Java允许将final关键字与抽象类结合使用,但这样做在逻辑上是不合理的。抽象类设计为需要被子类继承并实现其抽象方法,而final关键字则阻止了继承。在实际编程实践中,应避免创建final抽象类,因为这违背了面向对象设计的原则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BACnet到OPC UA的楼宇自动化系统与生产执行系统(MES)整合

在智能制造的浪潮下,一家位于深圳的精密电子制造企业面临着前所未有的挑战:如何高效地将楼宇自动化系统与生产执行系统(MES)整合,实现能源管理与生产流程的精细化控制。这家企业的楼宇控制系统使用的是BACnet协议&…

Java 线程池之 ThreadPoolExecutor

Java线程池,特别是ThreadPoolExecutor,是构建高性能、可扩展应用程序的基石之一。它不仅关乎效率,还直接关系到资源管理与系统稳定性。想象一下,如果每来一个请求就创建一个新的线程,服务器怕是很快就要举白旗了。而Th…

【图书推荐】《图神经网络基础、模型与应用实战》

本书目的 详解PyTorch 图神经网络基础理论、模型与十多个应用案例,带领读者掌握图神经网络在自然语言处理、计算机视觉、推荐系统、社交网络4个领域的应用开发方法,丰富读者利用深度学习算法解决实际问题的能力。 本书案例 图卷积网络实现图注意力网络…

Comate,一款基于文心大模型的智能编程助手

一、官网 Baidu Comate官网 二、安装VSCode 如何下载安装VSCode 三、VSCode安装Comate 安装方式1 访问Comate官网点击 立即安装Comate插件 按钮快速安装 安装方式2 访问VSCode市场中的BaiduComate 点击 Install 按钮访问扩展详情界面 2.打开VSCode 3.安装Comate 四、…

先经营好自己,才是成事最坚实的基础!做事要稳!

电影《教父》里有句著名的台词说:花半秒钟就能看透事物本质的人,和花一辈子也看不透事物本质的人,注定是截然不同的命运。而这所谓的“看透本质”,就是事物的底层逻辑。 底层逻辑是一种解决问题的思维模式。底层逻辑越坚固&#x…

初识Node.js-回调函数(详解回调函数使用)

目录 一、回调函数介绍 二、 回调函数语法 1.阻塞代码实例 2.非阻塞代码实例 一、回调函数介绍 在 Node.js 中,回调函数是一种常见的编程模式,用于处理异步操作。当执行某个耗时的操作时(比如文件 I/O、网络请求等)&#xff…

【c++实现获取web信息】

要在 C 中获取 Web 信息,您可以使用 C 中的网络库,如 cURL 或 Boost.Beast 等,来进行 HTTP 请求并获取 Web 内容。以下是一个简单的示例,演示如何使用 cURL 库来实现获取 Web 信息: 步骤 1:安装 cURL 库 …

中金:如何把握不断轮动的资产“风口”

从比特币到日股,到黄金与铜再到当前的港股,每次超预期大涨后都透支回调。 今年以来资产的“风口”不断轮动,从比特币到日股,到黄金与铜,再到当前的港股,资产仿佛“接力”般交替领先,同时“风口”…

js api part6

正则表达式 正则表达式 (Regular Expression)是用于 匹配字符串中字符组合 的模式。在 JavaScript中,正则表达式也是对象。通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式。 正则表达式在 JavaScript中的…

spring框架学习记录(3)

Spring事务 Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功或同失败 Spring事务角色 事务管理员:发起事务方,在Spring中通常指代业务层开…

AI智能分析视频监控行业的发展趋势和市场发展浅析

监控视频AI智能分析技术的现状呈现出蓬勃发展的态势,这一技术源于计算机视觉和人工智能的研究,旨在将图像与事件描述之间建立映射关系,使计算机能够从视频图像中分辨出目标信息。 在技术上,监控视频AI智能分析技术已经实现了对视…

Ps中 饱和度 和 自然饱和度 的区别?

1.饱和度(Saturation):在Photoshop中,饱和度是一个全局性调整,它影响图像中所有颜色的鲜艳程度。当你增加饱和度时,所有的颜色都会变得更浓烈、更鲜艳;相反,减小饱和度会使图像整体变…

小猪APP分发:重塑应用分发市场的创新力量

在移动互联网蓬勃发展的今天,应用分发平台作为连接开发者与用户的桥梁,扮演着至关重要的角色。然而,随着市场的饱和,如何在众多平台中脱颖而出,为开发者提供更宽广的舞台,同时确保用户能够便捷、安全地获取…

vue2 H5原生input标签实现拍照功能、web端实现上传图片功能,以及实现图片预览功能和修改上传图片原生样式

前言:我做的项目是H5嵌套小程序。要实现的功能是拍照功能,且,在未调用接口前有预览功能。 拍照功能: 补充:手机端是拍照直接调用设备摄像头拍照,web端是上传图片的形式。 因为input type"file" …

Nuxt3路由跳转

学习这篇文章之前&#xff0c;需要具备使用Nuxt3框架搭建基础项目 ,如果有这个基础可以跳过.直接看下面的声明式路由跳转 声明式路由跳转 创建两个基础文件 ~/pages/index.vue 和 ~/pages/About.vue ⚠️一定要是index.vue不能够大写Index.vue&#xff0c; 否则报错. <!--…

程序员必备的7大神器,效率飞起!

我们都知道程序员在工作时&#xff0c;会经常遇到任务繁重的情况&#xff0c;为了提高效率&#xff0c;程序员们也会借助一些软件&#xff0c;那么哪些软件可以帮助程序员们提高工作效率呢&#xff1f; 整理不易&#xff0c;关注一波&#xff01;&#xff01; 1. Xftp 7 Xft…

数据结构-线性表-应用题-2.2-4

从有序顺序表中删除其值在给定值s与t之间&#xff08;要求s<t&#xff09;的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则显示出错信息并退出运行。 有序顺序表如无特殊说明&#xff0c;一般指递增有序 先找到值大于等于s的第一个元素&#xff0c;然后找值…

区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(一)

&#x1f436;原文&#xff1a; Preventing Content Cloning in NFT Collections &#x1f436;写在前面&#xff1a; 这是一篇 2023 年的 CCF-C 类&#xff0c;本博客只记录其中提出的方法。 A Robust NFT Collection Functionality 我们将在本节中提出一个定义。在假设有恶…

06-beanFactoryPostProcessor的执行

文章目录 invokeBeanFactoryPostProcessors(beanFactory)invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);invokeBeanFactoryPostProcessors(regularPostProc…

将ESP工作为AP路由模式并当成服务器

将ESP8266模块通过usb转串口接入电脑 ATCWMODE3 //1.配置成双模ATCIPMUX1 //2.使能多链接ATCIPSERVER1 //3.建立TCPServerATCIPSEND0,4 //4.发送4个字节在链接0通道上 >ATCIPCLOSE0 //5.断开连接通过wifi找到安信可的wifi信号并连接 连接后查看自己的ip地址变为192.168.4.…