持续总结中!2024年面试必问 100 道 Java基础面试题(二十八)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(二十七)-CSDN博客

五十五、Object类有哪些常用的方法?

Java中的Object类是所有Java类的根类,它位于类继承层次结构的顶端。Object类提供了一些基础的方法,这些方法在Java编程中非常常用。以下是Object类的一些常用方法:

  1. equals(Object obj)

    • 用于检查两个对象是否相等。默认实现比较的是对象的内存地址,但通常需要被重写以提供基于内容的比较。
  2. hashCode()

    • 返回对象的哈希码值。通常与equals()方法配合使用,如果两个对象通过equals()比较是相等的,那么它们的hashCode()值也必须相等。
  3. toString()

    • 返回对象的字符串表示。默认实现返回一个字符串,该字符串由类名、符号“@”以及对象的哈希码的无符号十六进制表示组成。通常需要被重写以提供更有用的字符串表示。
  4. getClass()

    • 返回对象的Class对象,可以用来获取类的类型信息。
  5. wait()

    • 导致当前线程等待,直到另一个线程调用同一个对象的notify()notifyAll()方法。
  6. notify()

    • 唤醒在此对象监视器上等待的单个线程。
  7. notifyAll()

    • 唤醒在此对象监视器上等待的所有线程。
  8. clone()

    • 创建并返回对象的一个副本。这是一个受保护的方法,并且需要在子类中被重写为public。默认实现抛出CloneNotSupportedException
  9. finalize()

    • 由垃圾回收器在对象被垃圾回收前调用,用于在对象被回收前进行清理工作。由于其不确定性和不推荐使用,通常不推荐重写此方法。

示例代码

public class MyClass extends Object {@Overrideprotected Object clone() throws CloneNotSupportedException {// 实现克隆逻辑return super.clone(); // 调用Object类的clone()方法}@Overridepublic boolean equals(Object obj) {// 实现equals逻辑if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;return true;}@Overridepublic int hashCode() {// 实现hashCode逻辑return super.hashCode(); // 可以使用Object类的默认实现或者提供自定义实现}@Overridepublic String toString() {// 实现toString逻辑return "MyClass{" + "someField='" + someField + '\'' + '}';}// 其他自定义方法和属性
}

在这个示例中,MyClass继承自Object类,并重写了clone()equals()hashCode()toString()方法。

注意事项

  • 重写equals()方法时,通常也需要重写hashCode()方法,以维护两者的一致性。
  • Object类的wait()notify()notifyAll()方法与同步和多线程编程紧密相关,它们在对象的同步方法或同步代码块中使用。
  • finalize()方法在Java中通常不推荐使用,因为它的行为是不确定的,并且在Java 9中被标记为过时(deprecated)。

Object类的方法为Java对象提供了基本的操作,这些方法的重写可以实现类的具体行为,是面向对象编程中多态和封装的重要体现。

五十六、普通类和抽象类有什么区别?

在Java中,类可以根据它们的特性被定义为普通类(也称为具体类)或抽象类。以下是普通类和抽象类之间的区别:

普通类(具体类)

  1. 定义:普通类是完整的类定义,它包含了数据成员(属性)和方法的实现。
  2. 实例化:你可以创建普通类的实例,即普通类的对象。
  3. 方法实现:普通类中的方法必须提供完整的实现细节。
  4. 构造器:普通类可以有构造器,并且可以没有抽象方法。
  5. 继承:普通类可以继承其他普通类或抽象类。
  6. 使用场景:当类的设计是完整的,并且不需要被其他类继承以实现未定义的方法时,使用普通类。

抽象类

  1. 定义:抽象类是一种不完整的类定义,它允许包含抽象方法,即没有方法体的方法。
  2. 实例化:你不能直接创建抽象类的实例。如果尝试实例化一个抽象类,Java编译器会报错。
  3. 方法实现:抽象类可以包含抽象方法,也可以包含已经实现的方法。
  4. 构造器:抽象类可以有构造器,但只能通过子类实例来调用。
  5. 继承:抽象类可以继承其他抽象类或普通类,并可以被其他普通类继承。
  6. 使用场景:当类设计为其他类的基类,并且你希望定义一些通用的属性和方法,同时为派生类留下一些实现细节时,使用抽象类。

示例代码

// 抽象类
abstract class Animal {abstract void makeSound(); // 抽象方法void eat() { // 具体方法System.out.println("This animal eats food.");}
}// 普通类
class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Woof woof!");}public static void main(String[] args) {// Animal animal = new Animal(); // 错误:不能实例化抽象类Dog dog = new Dog(); // 正确:Dog继承自Animal,并且实现了makeSound()方法dog.makeSound(); // 输出 "Woof woof!"dog.eat(); // 输出 "This animal eats food."}
}

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

注意事项

  • 抽象类通常用作基类,它们定义了一组相关类的通用接口。
  • 抽象类可以有成员变量和具体方法的实现,这使得它们可以有部分实现的细节。
  • 普通类实现所有的方法,而抽象类至少有一个未实现的方法。
  • 抽象类不能被实例化,但可以被继承,继承的普通类必须实现所有的抽象方法(除非该普通类也是抽象的)。

总结来说,普通类提供了类的完整实现,适合创建对象;而抽象类提供了类的框架,它定义了一些方法的签名,但留给继承的类去实现具体的功能。抽象类是实现代码复用和多态性的重要手段。

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

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

相关文章

「2024年」前端开发常用工具函数总结 TypeScript

前言 在前端开发中,工具函数是提高代码复用率、保持代码整洁和增加开发效率的关键。使用 TypeScript 编写工具函数不仅可以帮助开发者捕捉到更多的类型错误,还可以提供更清晰的代码注释和更智能的代码补全。下面是一些在 TypeScript 中常用的前端开发工…

在Django中实现多用户角色和权限管理的方法

在Django中实现多用户角色和权限管理可以通过以下步骤实现: 定义用户角色模型:首先,定义一个用户角色模型,该模型表示不同的用户角色,例如管理员、普通用户、编辑等。 from django.db import modelsclass Role(model…

移动构造函数是否标记noexcept对性能有重要影响

1. 移动构造标记noexcept时才会被正确调用 #include <iostream> #include <string> #include <vector>class Vehicle{ public:Vehicle(){std::cout << "Vehicle default-ctor called.\n";}Vehicle(const std::string& brand) : brand_(…

Java如何获取当前日期和时间?

Java如何获取当前日期和时间&#xff1f; 本文将为您介绍 Java 中关于日期和时间获取的方法&#xff0c;以及介绍 Java 8 中获取日期和时间的全新API。 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取&#xff0c;此方法优势是…

Hadoop生态系统的核心组件探索

理解大数据和Hadoop的基本概念 当我们谈论“大数据”时&#xff0c;我们指的是那些因其体积、速度或多样性而难以使用传统数据处理软件有效管理的数据集。大数据可以来自多种来源&#xff0c;如社交媒体、传感器、视频监控、交易记录等&#xff0c;通常包含了TB&#xff08;太…

【算法】双指针思想

一、Leetcode27.移除元素 1.题目描述 给你一个数组 nums和一个值 val&#xff0c;你需要 [原地] 移除所有数值等于 val的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 [原地 ]修改输入数组。 元素的顺序可以…

【C语言】详解预处理

、 最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 •✨说在前面 &#x1f34b;预定义符号 &#x1f34b; #define • &#x1f330;1.#define定义常…

ControlNet官方资源链接【ControlNet论文原文】【持续更新中~】

ControlNet官方资源链接 ControlNet论文原文&#xff1a;https://arxiv.org/abs/2302.05543ControlNet官方GitHub&#xff1a;https://github.com/lllyasviel/ControlNetControlNet 1.1官方GitHub&#xff1a;https://github.com/lllyasviel/ControlNet-v1-1-nightlyControlNe…

phpMyAdmin增加自定义IP登录教程

phpMyAdmin增加自定义IP登录教程 1、打开phpMyAdmin目录&#xff0c; 在此目录下是否有config.sample.inc.php文件&#xff0c;如果存在&#xff0c;那么将其改名为config.inc.php&#xff08;为避免修改失误所造成的损失&#xff0c;强烈建议先备份config.sample.inc.php文件…

4_C语言复杂表达式与指针高级应用

指针数组与数组指针 字面意思来理解指针数组与数组指针 指针数组的实质是一个数组&#xff0c; 这个数组中存储的内容全部是指针变量。 数组指针的实质是一个指针&#xff0c; 这个指针指向的是一个数组。 分析指针数组与数组指针的表达式 int * p[5]; 指针数组 int (*p)[5]…

等保测评考试重点题库分享上

一、单选题 1、下列不属于网络安全测试范畴的是&#xff08;C&#xff09; A&#xff0e;结构安全 B.便捷完整性检查 C.剩余信息保护 D.网络设备防护 2、下列关于安全审计的内容说法中错误的是&#xff08;D&#xff09; A&#xff0e;应对网络系统中的网络设备运行情况、网…

UnityWebGL使用sherpa-ncnn实时语音识别

k2-fsa/sherpa-ncnn&#xff1a;在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 (github.com) 如果是PC端可以直接使用ssssssilver大佬的 https://github.com/ssssssilver/sherpa-ncn…

bind、call和apply

bind、call和apply都是 JavaScript 中用于改变函数执行上下文&#xff08;即函数内部的this指向&#xff09;的方法&#xff0c;它们的主要区别如下&#xff1a; bind 方法会创建一个新的函数&#xff0c;并将这个函数的执行上下文绑定到指定的对象。它不会立即执行函数&#x…

[嵌入式系统-62]:RT-Thread-内核:多核CPU SMP的支持与移植

目录 RT-Thread SMP 介绍与移植 1. 多核的优点 2. 多核启动 2.1 概述 2.2 CPU0 启动流程 2.3 次级 CPU 启动流程 3. 多核调度 3.1 任务特性 3.2 调度策略 4. SMP 内核接口 处理器间中断 IPI OS Tick 自旋锁 spinlock 任务绑定 4. SMP移植说明 编译环境准备 创…

配置网关,解决本地连接不上Linux虚拟机的问题

在Window环境下&#xff0c;使用远程终端工具连接不了VMware搭建的Linux虚拟机&#xff08;CentOS 7&#xff09;&#xff0c;并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题&#xff1a; 1 查看虚拟机网关地址 在VMware虚拟机上…

opencv merge使用

OpenCV 中的 merge 函数用于将多个单通道或多通道的图像合并成一个多通道的图像。 在C中&#xff0c;OpenCV的merge函数也提供了相同的功能&#xff0c;用于合并多个单通道或多通道的图像。下面是一个使用C的示例&#xff1a; #include <opencv2/opencv.hpp> #include &…

数据库开发关键之与DQL查询语句有关的两个案例

案例 案例1 条件分页查询 查看项目经理提供给我们的需求文档 模糊匹配的含义是 只要包含"张"就可以 use dduo;-- 按照需求完成员工管理的条件分页查询 根据输入条件 查询第一页的数据 每页展示10条记录 -- 输入条件&#xff1a; -- 姓名&#xff1a; 张 -- 年龄&…

基于YOLOv8的水稻虫害识别系统,加入BiLevelRoutingAttention注意力进行创新优化

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的水稻虫害识别&#xff0c;阐述了整个数据制作和训练可视化过程&#xff0c;并加入BiLevelRoutingAttention注意力进行优化&#xff0c;最终mAP从原始的 0.697提升至0.732 博主简介 AI小怪兽&#xff…

SQL-索引篇整理

什么样的列适合建索引&#xff1f; 适合创建索引的列:主键、频繁进行范围检索的列、时常进行多表连接的列、数据量大的表,数据差异大的列。 索引优缺点 索引是数据库中用于提高数据检索性能的排好序的数据结构。它类似于书籍的目录&#xff0c;通过建立特定的数据结构将列或…

c语言从入门到函数速成(2)

温馨提醒&#xff1a;本篇文章适合人群&#xff1a;刚学c又感觉那个地方不怎么懂的同学以及以及学了一些因为自身原因停学一段时间后又继续学​​​c的学 好&#xff0c;正片开始&#xff01; 数组 概念&#xff1a;数组中存放的是1个或者多个数据&#xff0c;但是数组元素个…