一个问题串联 Java 的几个基础知识

前言

关于 “==” 和 equals() 的区别这个问题,我之前一直搞的很乱,虽然面试的时候一直没有被问到,但是我感觉这种是属于最基础的知识,如果不懂好像不是很好。后来我发现通过这个问题,可以串联起很多的知识点,所以我觉得可以写一篇文章来总结一下,顺便把这个问题涉及的知识点总结梳理一下。

“==” 与 equals() 的区别

对于这个问题,我们首先要知道,“==”是一个符号,而equals()是一个方法。这就意味着equals()方法里面可以使用“==”。“==”的本质其实是判断两个对象的地址是否相等,而equals()里面用了“==”,所以在没有重写的情况下equals()也是用来判断两个对象地址是否相等的,若equals()重写,就要看重写后的方法要判断啥了。

重载和重写

说到重写,那我们就来顺便说一下方法重写和方法重载。之前我在面试的时候也有被问到过,方法重载指的是同一个类当中有很多名字相同的方法,但它们的参数不同,用来定义相似的功能。而方法重写是子类继承父类后,重写父类的方法。方法重写一般和多态有关系。

多态

既然重写和多态有关系,那我们就顺便再来聊聊多态。多态是面向对象的三大特性之一。我之前面试的时候,面试官问过我,叫我介绍一下面向对象的特性,我关于封装和继承都讲的挺好的,就是多态不太好解释,当时感觉 也是没理解,我自己当时说的自己都听不懂,估计面试官也听不懂。我今天趁着这个机会又重新梳理了一下。

我还是举电商支付双系统项目的例子来说明。在支付模块里,我想提供多种支付方式让用户选择。所以我会写一个payment父类,然后声明支付方法pay()。接着,我又写了很多子类,比如微信支付子类,支付宝支付子类,来重写这个pay()方法的具体逻辑。这样,无论用户选择哪种支付方式,我都可以通过统一的pay接口来执行具体的pay操作。

abstract class Payment {public abstract void pay();
}class CreditCardPayment extends Payment {@Overridepublic void pay() {System.out.println("进行信用卡支付");}
}class CashPayment extends Payment {@Overridepublic void pay() {System.out.println("进行现金支付");}
}class MobilePayment extends Payment {@Overridepublic void pay() {System.out.println("进行移动支付");}
}public class Main {public static void main(String[] args) {Payment creditCardPayment = new CreditCardPayment();Payment cashPayment = new CashPayment();Payment mobilePayment = new MobilePayment();creditCardPayment.pay();  // 输出: 进行信用卡支付cashPayment.pay();        // 输出: 进行现金支付mobilePayment.pay();      // 输出: 进行移动支付}
}

一句话总结多态就是:通过抽象类和方法重写,来实现多态这种思想。

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

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

相关文章

正则表达式浅析

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很…

Linux多进程通信(3)——详细说说共享内存原理及使用例程

1.共享内存原理及优缺点 共享内存的原理便是将相同的一片物理内存映射到进程A和进程B不同的逻辑地址空间,两个进程同时访问这块物理内存(共享内存)。 1)优点 共享内存是进程间通信访问速度最快。 例如消息队列,FIFO&…

Google Chrome将某个页签静音,不是网站

Google Chrome将某个页签静音,不是网站 打开chrome://flags/在里面搜索,audio,找到Tab audio muting UI contorl的选项,右侧设置为Enable。重新启动浏览器。 发现有声音的浏览器页签有一个喇叭图标,点击一下就行了。

Linux中间件(nginx搭建、LNMP服务搭建)

目录 一、安装nginx 第一步、下载nginx的压缩包到Linux中 ​第二步、安装依赖 第三步:安装 nginx 第四步:启动nginx 第五步:测试nginx 二、 nginx的配置文件 nginx.conf文件内容解读 案例:发布多个网站 二、lamp/lnmp …

一文入门Ubuntu22

目录 1.安装Ubuntu22 2.常用目录 3.常用指令 1.sudo 超级用户权限运行命令 2.ls 罗列当前文件信息 3.文件目录相关: 1.cd改变工作路径: 2.pwd 3.创建目录和文件: 4.which 5.ps 6.kill 7.ping 4.用户相关 5.ssh与scp 6.服务相关…

数字孪生|山海鲸数据管家简介及安装步骤

哈喽,大家好啊,我是雷工! 最近在学习数字孪生相关的软件山海鲸,了解到采集Modbus协议需要先安装山海鲸数据管家,本节先学习数据管家及安装步骤,以下为学习笔记: 1、简介 数据管家是帮用户进行…

vue+nodejs+小区物业报修系统2e1fq

在对平台的各个功能模块建成整合后,使系统能够正常的运行,让用户能够通过使用本系统进行物业管理。 (1)前台业主端预期结果:业主能够查看物业相关公告信息,能够查看自己的缴费信息以及能够报修和投诉。 &am…

Android Studio调试中的坑

1、新建Android工程后编译发现报错 2、发现无33和34的SDK更新 3、查看google相关文档 Android Gradle 插件 8.3 版本说明 | Android Studio | Android Developers 如果需要支持相关更高SDK需要的Android Studio版本和Android Gradle 插件是有版本要求的,相关要…

Vision-Language Models for Vision Tasks: A Survey

论文地址:https://arxiv.org/pdf/2304.00685.pdf 项目地址:https://github.com/jingyi0000/VLM_survey 一、综述动机 视觉语言模型,如CLIP,以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖&a…

2_3.Linux系统中的日志管理

# 1.journald # 服务名称:systemd-journald.service journalctl 默认日志存放路径: /run/log (1) journalctl命令的用法 journalctl -n 3 ##日志的最新3条--since "2020-05-01 11:00:00" ##显示11:00后的日…

基于STM32的汽车防窒息系统

文章目录 基于STM32的汽车防窒息系统系统简介材料展示视频制作硬件连接原理图PCB实物图GSM模块使用GSM模块代码 SGP30模块SGP30模块代码 步进电机驱动步进电机代码 其他模块主逻辑代码 总结 基于STM32的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行,汽车大…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”,可以保护表格不被他人随意打开,那如果后续不需要保护了,不想每次打开Excel都需要输密码,要怎么去除“打开密码”呢? 今天分享3个方法,最后一个方法记得收藏起来,以…

基于51单片机的智能报警系统Proteus仿真

地址:https://pan.baidu.com/s/10dhkyV5O629UpFHHV67LpQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectroni…

LVS、HAProxy

集群:将很多个机器组织到一起,作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类:负载均衡集群:Load Balance。高可用集群:High Available。高性能集群:High Performance Com…

Python学习从0到1 day20 第二阶段 面向对象 ② 封装

缘分 朝生暮死犹如露水 —— 24.4.1 学习目标: 1.理解封装的概念 2.掌握私有成员的使用 一、面向对象三大特性: 面向对象编程,是许多编程语言都支持的一种编程思想 简单理解是:基于模板(类)去创建实体&…

枚举---算法

1、定义 枚举算法:也称之为穷举算法,这种算法就是在解决问题的时候去使用所有的方式去解决这个问题,会通过推理去考虑事件发生的每一种可能,最后推导出结果。优点:简单粗暴,它暴力的枚举所有可能&#xff…

Mysql故障和优化

一、MySQL故障 二、MySQL优化 1.硬件优化: 2.数据库设计与规划 1.提前估计数据量,使用什么存储引擎 2.数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性 3.增加多台服务器,以达到稳定、高效的效果。主从同步、…

风控系统:通过净值及盈亏开启和关闭自动交易

一、风控对交易员的好处 帮助交易员执行交易纪律并保护他们的交易资金。 纪律风控:对不符合交易纪律的交易执行风控,对交易纪律性差的交易员执行约束操作。净值风控:对满足条件的净值执行风控,防止交易员的账户净值过度下降。手数…

Memory Analyzer Tool使用教程

下载地址&#xff1a;https://eclipse.dev/mat/previousReleases.php 下载JDK8对应的MAT版本 使用jps查看pid jps 使用jmap生成heap dump文件 jmap -dump:formatb,live,filexxx.bin <pid> 使用MAT打开heap dump文件 查看GC Roots

【Linux入门】Linux简史

Linux 是什么&#xff1f;Linux 是一款叫做操作系统的软件。 操作系统这款软件有什么样的意义呢&#xff1f;简单来说&#xff0c;比如有顾客买了一台笔记本电脑&#xff0c;这台笔记本电脑由电脑硬件组成&#xff0c;在这堆硬件上一定搭载了一款操作系统。正因为操作系统存在&…