韩顺平0基础学java——第15天

p303-326

重写override

和重载做个对比

22f2bc19c02f4da5ad22e835a72cc75d.png

注:但子类可以扩大范围,比如父类是protected,子类可以是public

多态

方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

多态的具体体现:

1.方法重载体现多态

        通过不同的参数个数去调用sum方法,就会调用不同的方法,因此对sum方法来说,就是多种状态的体现。

2.方法重写体现多态

3.对象的多态(核心)

        (1)一个对象的编译类型和运行类型可以不一致

        (2)编译类型在定义对象时,就确定了,不能改

        (3)运行类型是可以变的

        (4)编译类型看定义时 = 号的左边,运行类型看 = 号右边。

例:Animal a1 = new Dog();//a1的编译类型是Animal,运行类型是Dog,

a1 = new Cat();//a1的运行类型变成了Cat,编译类型仍然是Animal

向上转型

多态,一定是建立在封装和继承之上的,向上转型:父类的引用,指向了子类对象,如:

Animal a1 = new Dog();就是向上转型 

可以调用父类的所有成员(考虑访问权限)

不能调用子类特有成员,最终运行效果看子类的具体实现,也就是说只能调用子类重写的方法

向下转型

Dog d1 = (Dog)a1;

1.只能强转父类的引用,不能强转父类的对象!

2.要求父类的引用必须指向的是当前目标类型(比如猫不能转成狗,但是动物(指向狗的)可以转成狗)

3.向下转型后可以调用子类类型中所有成员。

我可以理解为,向下转型的前提是向上转型吗?

注意:属性没有重写一说!

属性的值看编译类型,方法看运行

instanceof比较操作符,用于判断对象的运行类型

动态绑定机制(阴间)

1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定

2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用

0314_韩顺平Java_动态绑定机制_哔哩哔哩_bilibili

多态数组

数组的定义类型为父类类型,里面保存的实际元素类型为子类类型

练习:创建一个Person对象,2个Student对象,和2个Teacher对象,统一放在数组中,并调用say方法。

e962d4e16a30418397e9961710286d0b.png

8eee07711e8a44e59c5c5cda27c1a6cb.png

       升级后:f090c7b2b2b84aaa93dc98c678842411.png

弄了个新的引用指向people【1】。这里有个teacher类

向下转型的快捷写法:

(Student)people[i].study();

多态参数

方法定义的形参类型为父类类型,实参类型允许为子类类型。

490258a716e248d3bc5a55ec447e9430.png

 0a00a93b61b944e990a555e92a8d3e02.png

02a034238023441e90220150b2b347fd.png

26962ebf4bda4362981180898bfbb46e.png

8ac7acef75da44b3a6f1c2ab76a25e0d.png

 

0317_韩顺平Java_多态参数_哔哩哔哩_bilibili




一些Object类的方法

 ==和equals

1==:既可以判断基本类型,又可以判断引用类型

2基本类型判断“值”。

3引用类型判断“地址”,即判断它们是不是同一个对象。 

4equals是Object类的方法,只能用来判断引用类型

子类重写equals

例:String的equals的源码:

80b8766964ee4a3488532c51a73bf358.png

如果传进来的对象就是当前对象,返回t。

如果传进来的是字符串(及其子类),那么向下转型(为什么不是向上??),接下来判断长度,并逐个字符比较。

如果比较的不是字符串,则直接返回f。

那么最原始的equals呢?↓

be55c03064154ba7a557a6b80743d31c.png

所以Object的equals方法默认就是比较对象的地址是否相同,即是不是同一个对象。

这里String中的equals把Object的equals重写了。

例2:

c14a93476d094aafbff562057e1dccab.png

第一个是==,判断地址是否相同,返回false,因为这里有两个对象

第二个equals已经被int类重写了,int类的equals源码是0ae7e411627d417280f58fc4fdefc7b1.png

即比较它们的值,因此返回true

自己重写equals

public class Person{

        private int age;

        private String name;

        private char gender;

        public boolean equals(Object obj){

        if(this == obj){

                return true;}

        if(obj instanceof Person){

             Person p = (Person)obj;

               return this.name.equals(p.name)&&this.age == p.age&&this.gender==p.gender;    

        }return false;

  }

}

课堂练习:

61c76ea7f48f40e6be9c66e015e0cc42.png

        F T F T F8357fcc2a2ee40b3bfcc5e4b915eab11.png

1c0e0ad74c5a43c7b3c9e39c4262fb03.png

F T,这里65和65.0的值是一样的

T

T

F

T

没见过不知道:Date是一个类型,“hello”是字符串,直接编译器报错

hashCode方法

返回对象的哈希码值,为了提高哈希表的性能。(哈希表是啥捏?听说后面会讲)

老韩的6个结论:

1.提高具有哈希结构的容器的效率

2.两个引用,如果指向的是同一个对象,则哈希值肯定是一样的

3.两个引用,如果指向的是不同对象, 当然哈希值也不一样

4.哈希值主要根据地址号来的,不能完全将哈希值等价于地址

5.后面再集合中hashCode如果需要的话,也会重写

toString方法

源码:

86f9b8ae6afe4375bbf125e38fed20f8.png

就是把对象的hashCode值转换为16进制的字符串~

经常会重写toString方法,输出对象的属性,甚至有模板。7b7444e81b5d4a6eb51fd9ad386c0864.png

当输出一个对象时,toString方法会被默认调用:b82490fdd1444e1d87d153f7235cb8c9.png

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器

SmartDNS是推荐本地运行的DNS服务器,SmartDNS接受本地客户端的DNS查询请求,从多个上游DNS服务器获取DNS查询结果,并将访问速度最快的结果返回给客户端,提高网络访问速度和准确性。 支持指定域名IP地址,达到禁止过滤的效…

【YOLOv5/v7改进系列】引入ODConv——即插即用的卷积块

一、导言 提出了一种称为全维度动态卷积(ODConv)的新颖设计,旨在克服当前动态卷积方法的局限性并提升卷积神经网络(CNN)的性能。以下是该论文提出的全维度动态卷积设计的优点和存在的缺点分析: 优点: 增强特征学习能力: ODConv通…

第十五届蓝桥杯物联网试题(省赛)

这个省赛题不算难,中规中矩,记得看清A板B板,还有ADC的获取要配合定时器

如何查看本地sql server数据库的ip地址

程序连线SQL数据库,需要SQL Server实例的名称或网络地址。 1.查询语句 DECLARE ipAddress VARCHAR(100) SELECT ipAddress local_net_address FROM sys.dm_exec_connections WHERE SESSION_ID SPID SELECT ipAddress As [IP Address]SELECT CONNECTIONPROPERTY(…

p10,idea开发工具

1 什么是ide 有编写,编译,运行三个功能合一的集成开发工具。

创建模拟器

修改模拟器默认路径 由于模拟器文件比较大,默认路径在C:\Users\用户名.android\avd,可修改默认路径 创建修改后的路径文件 D:\A-software\Android\AVD添加系统变量ANDROID_SDK_HOME:D:\A-software\Android\AVD重启Android Studio 创建模拟…

云端数据提取:安全、高效地利用无限资源

在当今的大数据时代,企业和组织越来越依赖于云平台存储和处理海量数据。然而,随着数据的指数级增长,数据的安全性和高效的数据处理成为了企业最为关心的议题之一。本文将探讨云端数据安全的重要性,并提出一套既高效又安全的数据提…

24年西藏事业单位报名详细流程

✨各位姐妹们注意啦!24西藏事业单位公告已出,本次计划公开招聘8⃣9⃣9⃣人即日起开始报名,想要上岸的姐妹们要抓紧了哦✊趁着还有时间赶紧开卷!!! 🌈24西藏事业单位招聘考试: &…

Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault

文章目录 前言一、简介1. MMU 内存管理2. 缺页中断3. 页表4. 小节 二、mmap 提前分配物理内存1. mm_populate 函数2. __mm_populate 函数3. populate_vma_page_range 函数4. __get_user_pages 函数5. find_extend_vma 函数6. find_vma 函数7. follow_page_mask 函数8. follow_p…

微信小程序-wx.showToast超长文字展示不全

wx.showToast超长文字展示不全 问题解决方法1 问题 根据官方文档,iconnone,最多显示两行文字。所以如果提示信息较多,超过两行,就需要用其他方式解决。 解决方法1 使用vant组件里面的tost 根据官方例子使用: 1、在…

Java进阶学习笔记36——算法

什么是算法? 解决某个实际问题的过程和方法。 1)导航; 2)滴滴打车; 3)抖音; 不同的算法,效率高、性能好! 在Java中,代码已经帮我们写好了,但为…

端午佳节到,礼轻情意重,闪侠惠递帮你高效便宜寄快递

马上就是端午佳节了,我们通常会吃粽子,赛龙舟,但是这些礼物我们该怎么快速的送到我们亲朋好友的手中呢?小编这里非常推荐大家使用闪侠惠递来寄快递。不仅能高效便捷的把礼物送到你的手中,而且还能以非常便宜的价格呢&a…

GIS之arcgis系列06:线划图缓冲区分析

缓冲区工具将在输入要素周围指定距离内创建缓冲区面。 缓冲区例程将遍历输入要素的每个折点并创建缓冲区偏移。 通过这些偏移创建输出缓冲区要素 原理: 01.打开文件 02.确定单位,在文件属性里。 03.工具箱-->分析工具-->邻域分析-->缓冲区。 …

Java中常见错误-Java中注解是否可以继承

Java中注解是否可以继承 Inherited基本概念使用场景注意事项 实体类自定义注解测试方法运行结果使用Inherited不使用Inherited 结论 在解决这个问题之前需要先了解一下Inherited Inherited 基本概念 ​ Inherited是Java中的一个元注解,位于java.lang.annotation包…

如何卸载ollama

文章目录 一 概述二 卸载2.1 Windows平台卸载 ollama2.2 Linux 平台卸载 ollama2.3 Docker 平台卸载 ollama 参考链接 一 概述 本文档主要讲述 ollama 如何卸载,适用范围包括 Windows Linux 以及 Docker 等平台的安装方式。 二 卸载 2.1 Windows平台卸载 ollama …

【干货】SaaS增长|提高销售转化率,用这几个方法就对了!

一、什么是销售转化率 1. 定义 销售转化率是指将潜在客户转化为实际购买者的比率。它衡量了销售过程中的效率和效果,对于评估销售团队的表现和制定销售策略非常重要。 2. 计算公式 销售转化率 (实际购买客户数 / 潜在客户数) 100% 实际购买客户数:…

【python深度学习】——tensor内部存储结构|内存优化与as_strided|内存紧凑化contiguous

【python深度学习】——tensor内部存储结构|内存优化与as_strided|内存紧凑化contiguous 1. tensor的元数据(metadata)和存储区(storage)1.1 元数据(metadata)1.2 存储区(Storage)1.…

excel公式怎么完全复制到另一列?

例如:A1单元格的内容是E1F1;想要复制到B列,内容也是E1F1,而不是F1G1;怎么做呢? 如果公式复制粘贴到其它位置出现偏差,通常有这么两个原因: 一、公式中的相对引用或混合引起 这个情…

操作字符串获取文件后缀名

记录一种操作字符串获取文件类型的操作方式,方便后期的使用。示例: 输入:"D:/code/Test/Test.txt" 输出:".txt" 设计逻辑: 1.通过查找”/“或者”\\“,找到文件名所在位置&#xff…

【并发程序设计】总篇集(八万字)

11_Concurrent_Programing 1.进程概念 在Linux中,进程是操作系统分配资源和调度运行的基本单位。 Linux中的进程有以下用处: 提高CPU利用率:通过进程的并发执行,可以让多个程序同时利用计算机的资源,这样每个用户都…