【软件工程师从0到1】- 继承 (知识汇总)

 前言

介绍:大家好啊,我是hitzaki辰。

社区:(完全免费、欢迎加入)日常打卡、学习交流、资源共享的知识星球。

自媒体:我会在b站/抖音更新视频讲解 或 一些纯技术外的分享,账号同名:hitzaki辰。

正文开始,抓紧上车!

8f4dc768ffa445d78de7eb9469c55c3d.png


一 - 概念

继承是类与类的一种关系,是一种“is a”的关系。比如“狗”继承“动物”,这里动物类是狗类的父类或者基类,狗类是动物类的子类或者派生类。

java中的继承是单继承,即一个类只有一个父类。在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类。

继承的好处:   子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有)从而实现了实现代码的复用;

语法规则:     只要在子类加上extends关键字继承相应的父类就可以了:

 

若继承的父类没有无参构造,但我们在构造方法也没调用它的有参构造,则报错,因为使用new构造一个对象时,

会先执行父类的构造方法,若没有使用super(参数列表)来调用父类指定构造方法,则默认调用父类无参构造方法。

二 - super关键字

它是一个关键字,用来表示父类,但不像this一样是一个实际变量,它不可以作为变量使用。它可以:

(1)调用父类构造方法,构造方法第一行且只能调用一次

(2)可以调用父类的非私有方法、属性

三 - 根类Object

Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object类。

Object 类是所有 Java 类的根基类,也就意味着所有的 Java 对象都拥有Object 类的属性和方法。

da736f1566964e29a4f689c66e9f217d.png

实现了Cloneable接口,才可以调用clone。

1 - toString

 获取对象信息的字符串,默认返回 "类名+@+hashCode()返回结果的十六进制格式"(重写它以返回自定义信息)

2 - equals

(1)它的原始实现是使用 == 来比较指针的值, 但系统类一般已经覆盖了equals(),比较的是内容。

(2)==符号不可以比较两个没有父子关系的对象。

 

如何高质量实现equals重写?

1. 使用==符号检查

2. 使用instanceof判断类型是否相同,作为比较的是equals方法所在类。

3. 进行类型转换,因为使用过instanceof,所以能比较成功的一定可以转换。

4. 比较每个关键属性,全部比较通过则返回true。

5. 测试重写的equals是否符合这5点。

f113dfd351bd49c495b2ed845557b8be.png

3 - hashCode

1)hashCode的默认实现是一个本地方法,不同虚拟机有不同实现。

2)无论是否覆盖,我们可以使用System.identityHashCode(Object x)方法返回此对象默认的hashcode值。

3)设计一个hashCode,它必须快,而且具有意义(使用有意义的字段来生成hashcode)。

4)hashCode不需要唯一(默认的hashCode唯一),因此更应该关注它的速度,而不是唯一性。

4 - 为什么hash和equals要一起重写

为了使诸如HashMap这样的哈希表正常使用,才有了如下的规定:

(因为我们想快速定位一个key,若通过equals一个一个比较,效率太低了,所以引入了hashcode)

eca4254c7ddd48ad870bd6c5d5664d0c.png

1)因此,重写了equals,必须重写hashCode,使其满足这些规定。

2)当然,如果我们不把自定义对象当成HashMap的键来使用,那么自定义对象不重写equals和hashCode也是可以的。

3)拿它当键时,哈希值是会发生冲突的,当定位到同一个位置,只能通过equals才能定位了正确的位置。

5 - finalize

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,

  可以覆盖此方法提供垃圾收集时的敏感词资源的回收,例如关闭文件等。(可以,但是不建议这么做)

结尾

感谢你看到这里,如果感觉内容不错的话请点赞支持一下!

如果小伙伴对我的讲解有疑问,欢迎评论区讨论。

 

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hitzaki辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值