首页 > 编程语言 >【JAVA】第十节:再谈super关键字,代码块,修饰符protected,编译器自动打印构造方法,get set方法,toStrring方法

【JAVA】第十节:再谈super关键字,代码块,修饰符protected,编译器自动打印构造方法,get set方法,toStrring方法

时间:2024-11-23 12:58:56浏览次数:8  
标签:构造方法 子类 代码 修饰符 第十节 方法 编译器 父类 Super

上篇讲了静态,静态变量初始化,还有继承的概念,这篇主要是补充之前一些内容的细节,还有一些零散知识;比如super,以及在有了继承以后,代码块的执行,protect关键字等等;

目录

一、再谈Super关键字

1.1 Super调用父类变量:

1.2 Super调用父类方法:

1.3 Super在子类构造方法中调用父类构造方法:

二、子父类代码块优先问题

三、访问限定修饰符protected

四、密封方法final(不能被其他类继承的类)

五、继承和组合

六、ToSting方法

七、使用编译器自动打印构造方法,get set方法,toStrring方法


一、再谈Super关键字

先回顾一下,我们之前使用Super时,主要是在 子类与父类有变量同名时,调用父类的变量使用;我们也提到了它与与this很像(上篇‘三、继承’展示图中提到)

我们在之前的时候也介绍了this的三种用法,其实Super也是同样有三种用法,下面介绍;

1.1 Super调用父类变量:

super.变量(不演示了,点蓝字上篇介绍)

1.2 Super调用父类方法:

父类子类同名的方法时,调用父类的方法,就用 super.方法名()

1.3 Super在子类构造方法中调用父类构造方法:

在子类方法调用父类构造方法,如果你的子类构造方法没用使用Super,其实代码会报错;

这是因为在初始化子类前要先帮父类出初始化,必须使用Super,并且必须在第一行,这与this一样,也说明,在这个情况下,他俩没法共存


二、子父类代码块优先问题

我们上篇同样介绍了代码块的内容,有静态代码块实例代码块,我们用静态代码块去初始化静态变量,并且也说明了,静态代码块只会加载一次

那么如果父类子类都有静态代码块实例代码块构造方法,它们的执行顺序是什么呢?下面代码来演示

结果:

从上方代码看,我们 父类子类都有静态代码块实例代码块构造方法,它们执行的顺序是:

第一次执行:

父类静态代码块 ==> 子类静态代码块

父类实例 ==> 构造

最后子类实例 ==> 构造

第二次执行:

父类实例 ==> 构造

子类实例 ==> 构造

这也验证了我们之前说的,静态代码块随着类的加载,只加载一次实例、构造的代码都是先执行父类,然后才是子类的


三、访问限定修饰符protected

前面我们提供了一张访问修饰限定符的表格,上面有各个修饰符的范围,但是protected没细讲,

根据表我们可以看出protected修饰的变量与方法,在不同包的子类中也可以使用;下图演示

记得要导包,并且为父类构造方法初始化。


四、密封方法final(不能被其他类继承的类)

如果我们想让一个类不能被其他类继承,我们就只要在类名前加上final就可以了


五、继承和组合

关于组合,我先举个例子,像是汽车,汽车有轮胎,有发动机汽车由各个部件组合而成的,再举个例子,学校学校由老师,同学组合而成的。

在代码中:

组合是指一个类另一个类作为其成员变量,通过组合的方式来使用另一个类的功能。组合关系是一种“包含”关系,一个类的对象包含了另一个类的对象,从而可以使用另一个类的属性和方法

我个人理解这种用法,就是把另一个类当作一种数据类型去使用,像是Int DoubleI这些一样,不过这些类型自己的实际含义


六、ToSting方法

我们有很多字段,在初始化完成以后,想要去打印时,直接打印出来的是引用

所以一般是一个个去写打印,这很累,但是我们在类中写一个ToSting方法就不一样了;

这其实是因为打印方法Java底层层层调用最后调用方法是toStrring方法,所以这个方法可以打印所有字段。


七、使用编译器自动打印构造方法,get set方法,toStrring方法

我们在之前介绍了各种方法,有封装时为了初始化变量用的get set方法,有创建对象时调用的构造方法,还有刚刚提到的toStrring方法,它们都可以靠编译器自动写出来;

方法是鼠标右键:

点进去可以按 CTRL 不松选择你要创建该方法的变量。

标签:构造方法,子类,代码,修饰符,第十节,方法,编译器,父类,Super
From: https://blog.csdn.net/qq_75234423/article/details/143982097

相关文章

  • 封装、权限修饰符、封装的案例
    1.面向对象的三大特征其中继承和多态放在后面讲,今天只聊封装.2.封装的介绍举例如果要我们处理一堆学生的数据,我们可以直接设计一个类,将我们需要处理的数据封装到类当中变为成员变量,然后我们直接创建两个对象,再将数据封装到对象中即可.3.封装的好处1.便于我们维护数据。......
  • 【Linux学习】(6)编译器gcc/g++
    前言本节重点:掌握gcc/g++编译器的使用,并了解其过程,原理一、Linux编译器-gcc/g++使用1.gcc/g++的基本使用在前面我们学习了vim,知道如何在Linux中编写代码。但又是如何编译代码的?——在Linux中我们编译代码使用的是gcc/g++。gcc只能用来编译C语言,g++即可编译C也可编译......
  • 【Linux探索学习】第八弹——Linux工具篇(三):Linux 中的编译器 GCC 的编译原理和使用详
    #1024程序员节|征文#Linux下的vim编辑器:【Linux探索学习】第七弹——Linux的工具(二):Linux下vim编辑器的使用详解-CSDN博客前言:在上一篇我们学习了如何在Linux环境下直接用vim编辑器来进行编辑代码,今天我们来学习如何运行我们所编辑的代码,运行代码就需要编译器,也就是我们下......
  • 用C++构建自己的编译器:从词法分析到代码生成
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界本文将带领读者从零开始构建一个简单的C++编译器。我们将逐步讲解如何进行词法分析、语法分析,以及如何将这些结果转换为目标代码。这篇文章的目标是帮助读者理解编译器的基本构成和工作原理,并提供可扩展的编译器......
  • 交叉编译器的命名规则是什么?
    交叉编译器(cross-compiler)是用来编译可在与编译器运行环境不同的架构或操作系统上运行的代码的工具。交叉编译器的命名通常遵循一个约定,以便能够描述编译器的目标平台。这个命名规则主要包含以下几个组成部分,通常顺序为:目标架构(TargetArchitecture):表示编译器生成代码的目标处......
  • Java中的修饰符——类、方法、变量的修饰
            Java中的修饰符可以根据其作用对象进行细分,主要包括类的修饰符、方法的修饰符和变量的修饰符。不同的修饰符适用于不同的场景,以下是对它们的详细划分和解释。1.类的修饰符(ClassModifiers)        修饰符可以用于类声明,影响类的行为和可见性。访......
  • java_day9_包的划分、形式参数、返回值、修饰符、内部类、匿名内部类
    一、包包的划分好处:1、方便管理我们的代码文件2、不同包下的文件名可以是一样的常见的包命名规则:1、按照功能划分增加-学生增加-老师增加删除-学生删除-老师删除修改......
  • sizeof vs strlen - 关于代码可读性、性能考量和编译器优化
    1、起因经常在咱们代码里面见到sizeof(“HEADER”)这类代码来计算常量字符串的长度,例如上次的一个代码review:之所以这么写可能基于以下几点考虑:(1)sizeof()是运算符而不是函数调用,编译时确定而不是运行时执行,因此不占用运行时时间(2)strlen()是GLIBC标准库函数,运行时需要进行......
  • 为什么需要 AI 编译器
    为什么需要AI编译器随着硬件技术的不断进步,进入了一个新的计算加速时代,这个时代的硬件平台变得越来越复杂和多层次。现代计算加速平台采用了多层架构,包括标量、向量、多核、多包、多机架等不同层次的并行处理能力。这种设计不仅提高了性能,也增加了硬件设计的复杂性。同时,现代计......
  • C++ 修饰符类型
    C++中的类型限定符const实例volatile实例mutable实例static实例register实例C++允许在 char、int和double 数据类型前放置修饰符。修饰符是用于改变变量类型的行为的关键字,它更能满足各种情境的需求。下面列出了数据类型修饰符:signed:表示变量可以存储......