• 【软件工程师从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类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,

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

    结尾

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

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

     

  • 相关阅读:
    CUDA学习笔记2——CUDA程序基本框架
    编译安装 Python
    30岁后再转行程序员,能行吗?
    1024 有奖征名|来给矩阵起源办公室的新猫取名字呀~
    Nginx -- SSL模块
    基础讲解——ES6
    MATLAB环境下基于稀疏最大谐波噪声比反卷积的信号处理方法
    English Learning - L3 Lesson4 VOA-Food 译文
    ThreeJS - 封装一个GLB模型展示组件(TypeScript)
    05-Nginx性能调优
  • 原文地址:https://blog.csdn.net/m0_56988741/article/details/134505043