一个问题串联 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 …

独孤思维:自己瞎琢磨副业,根本赚不到钱

01 有人说,干嘛付费学副业,自己摸索不就行了? 我想起之前有个博主说的一句话,我特别赞同,正好可以回答这个问题。 你做副业,给自己设的目标,就像去往自己理想的山峰。 你不付费,…

一文入门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、简介 数据管家是帮用户进行…

【C语言】字符串,补充:单引号和双引号, const和define, 常量指针和指针常量

【C语言】字符串:一串数据类型为字符(char)的数组(字符数组),结束符是\0。 一个字符占一个字节的内存,结束符\0也占一个字节的内存。 结束符 \0 :缩写NUL,空字符。表示字符串的结束。 NULL&…

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 插件是有版本要求的,相关要…

汇编——SSE对齐(一. 未对齐情况)

SIMD是(Single Instrument Multi Data),MMX实现了SIMD;SSE是(Streaming SIMD Extension),它取代了MMX;后来AVX(Advanced Vector Extension,高级向量扩展)对SSE进行了扩展…

acwing算法提高之图论--floyd算法及其扩展应用

目录 1 介绍2 训练 1 介绍 本专题介绍使用floyd算法求解的题目。 使用floyd算法,可以求解如下问题: 最短路。传递闭包。找图中的距离总和最小的环路。求恰好经过k条边的最短路。 floyd算法的原理讲解:基于动态规划。 状态表示d[k,i,j]&a…

nginx配置代理kibana

一、编辑kibana配置文件,修改server.basePath 配置文件中这行默认是注释掉的,我们取消注释并修改保存 server.basePath: "/elk" 二、重启kibana,root启动记得跟allow参数 nohup ./kibana --allow-root & 三、配置nginx代理…

Vision-Language Models for Vision Tasks: A Survey

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

Python selenium 使用Chrome 禁止弹出保存密码弹窗

chrome_optionwebdriver.ChromeOptions()#禁用“保存密码”弹出窗口 chrome_option.add_experimental_option("prefs",{"credentials_enable_service":False,"profile.password_manager_enabled":False})driverwebdriver.Chrome(optionschrome_o…

小组分享内容

目录 1.网络爬虫的作用(人话): 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

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的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行,汽车大…

GPT带我学-设计模式11-组合模式

设计模式类型 结构型设计模式 使用场景 将对象组合成树状结构来表现"部分-整体"的层次结构。这种模式能够使得客户端对单个对象和组合对象的使用具有一致性。这句话太抽象了,拿一个实际的网站菜单树例子来说。 例子:网页菜单树 一个网站的…

C++经典面试题目(十八)

1、请解释虚函数表的概念,并说明其在多态中的应用。 虚函数表(Vtable)是用于实现多态的一种机制,它是一个存储虚函数地址的表。每个含有虚函数的类都会有一个对应的虚函数表,其中存放着该类的虚函数的地址。当对象被创…