封装、继承、多态、上下转型、静态绑定、动态绑定、PO/Bean/Vo/Do/Dto,dljd reyco郭

news2024/12/26 22:24:35
  1. 封装
    1. “封装”这个概念,由两部分构成:一部分是封,一部分是装。
    2. “封装”这个动作,顺序应该是先装后封。
      1. 装:原本name、age、score是3个不同的、离散的数据,它们之间是有关系的是,都是用来描述一个学生的信息。因为是离散的,所以在做数据交互时不好传输,即可能要传3次,或者说一次要传3个数据。所以我们把name、age、score给装起来,装到自定义的Student.java这个类型里面去了。由原来的3个离散的数据,变成了一个Student.java数据,便于传输,也便于理解。
      2. 封:为什么要封?因为对于Student.java中的name、age、score,谁来都能改,谁来才能读,这是非常不好的。所以我们会把name、age、score都声明成私有的(private),这个过程就是把数据封起来了。
             但Student.java数据本身还是用于展示给别人看的,如果把数据全部封死了,那么Student.java就意义了。所以我们还是得提供访问name、age、score的方式,所以最终我们会提供他们的get/set方法。如果我想让name、age、score有读的权限,就提供get方法。如果想让name、age、score有写的权限就提供了set方法。当然,我们还可以加上访问权限public、protect、private,控制想让哪些人具有读的权限或写的权限。
  2. 继承
    1. 继承是,子类继承了父类的什么?分两种
      1. 第1种:对成员变量的继承,堆内存空间增加
        1. 对成员变量的继承是数据的拷贝(内存空间 + 数值),不管你是私有还是公有的,统统拷贝。父类如果有id、name、age、score这4个属性,意味着在子类对象的堆内存里面也会分配这样的4个数据存储空间,并且子类还会把父类的数据一块拷贝过来进行填充。
        2. 此时,子类和父类所占用的内存空间 + 包括数据都是独立的,各管各的。
        3. 但是,对于私有的成员变量的访问,如果父类是私有的,那么子类不可以直接用"."进行访问,只可以间接访问(get、set方法)。这就回到了以前讲的那种继承了,对访问权限的继承。
        4. 注意事项:访问权限的内存空间是没有任何关系的
          1. 现在的继承:而这里老师讲的是,子类对于父类的成员变量的继承,内存空间是怎么说的。
          2. 以前的继承:老师说(官方文档也说)私有的是不能被继承的,这种说法是访问权限,即子类是不是能够把父类的访问权限给继承过来。
      2. 第2种:对方法的继承,方法区的空间没有增加
        1. 对于方法的继承,继承的是方法的使用(访问)权限,而不是方法的代码片段,不是代码拷贝,方法的代码片段没有被继承。什么是对使用(访问)权限的继承?即,如果父类的方法是公有的,那么子类就会继承此方法的使用(访问)权限,子类这边就能用,子类这边也是公有的。
        2. 注意事项:方法的代码片段不放在栈里面啊,我们一直在强调栈里面放的是方法栈帧,不包含方法的代码片段。方法栈帧是什么东西?方法栈帧里这的是方法的签名与及方法被调用完后应该返回到哪(地址)。
              那方法的代码片段放在哪里?方法的代码片段是放在方法区里面的。如下图所示::::::
    2. 方法的重写(覆盖)
      1. 从方法区内存空间的角度来说,方法的重写是父类在方法区中有一个方法代码片段,而子类重写的方法以后也在方法区中新创建了一个方法区的代码片段,这两个代码片段相互独立、相互隔离、互不干扰、各管各的、各调各的。
        1. 静态方法的重写(覆盖):静态方法是可以重写(覆盖)的。那以前老师说,静态方法不存在重写(覆盖)是什么一回事呢?那是针对多态情况下说的,即在多态情况下子类对父类的静态方法的重写(覆盖)是不起做用的。但是,如果不使用多态,子类对父类的于静态方法,同样是可以发生重写(覆盖)的。
          1. 注意事项:静态方法和你具体的引用是什么没有任何关系,只关心引用的类型是什么。比如:Animal a = null; a.call(); 照样可以调用,不会抛出空指针异常。
    3. ​​​​​​​成员变量也是有重写(覆盖)的
      1. 原理,对方法的重写(覆盖)。
  3. 多态
    1. 上转型:Animal a = new Cat()
    2. 下转型:毫无无意义。
  4. 静态绑定与动态绑定
    1. 程序的执行分为两个阶段:一个是编译期(阶段);一个是运行期(阶段)。
      1. 编译期(阶段),静态绑定:Animal a = null; a.call();这句代码的运行流程是什么?首先,在编译期(阶段)的时候,Animal和a做了一个静态绑定,把a赋值为Animal类型了,因此调用静态方法是父类的静态方法。
      2. 运行期(阶段),动态绑定:Animal a = new Cat(); a.call();这句代码的运行流程是什么?
        1. ​​​​​​​​​​​​​​首先,在编译期(阶段)的时候,Animal和a做了一个静态绑定,把a赋值为Animal类型了.
        2. 其次,真正在运行期(阶段)的时候,它发现Animal a 这个引用指向的实际是new Cat();,所以又发生了一次绑定,这次叫动态绑定,产生了上转型,由于多态性,所以这次a.call();中的call()方法动态绑定的是子类的call()方法。
  5. ​​​​​​​​​​​​​​​​​​​​​​​​​​​​PO/Bean/Vo/Do/Dto的关系
    1. ​​​​​​​PO和Bean是普通的实体类对象。
    2. Vo、Do和Dto都是一个概念(具体概念还是存在一点小差别,分得更细了),都指的是数据传输对象,一般用于和页面进行交互。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

东芝TLP5772光耦与SLM346兼容光耦的单通道隔离驱动器比较

东芝TLP5772光耦与SLM346兼容光耦的单通道隔离驱动器比较一般描述:SLM346是一款光兼容单通道,隔离栅驱动器,用于IGBT、MOSFET和2.5A源和2.5A汇峰值输出电流和5kVRMS加强隔离等级。SLM346可以驱动低侧和高侧功率场效应晶体管。可靠性升级超过标…

PDFPrinting.Net操作进行细粒度控制

PDFPrinting.Net操作进行细粒度控制 PDFPrinting.Net能够容易且灵活地预测完美的打印结果以及用户文件的示例性显示。可以快速浏览.NET PDF打印中最关键的元素。如果用户需要获得更详细的概述,那么他可以查看快速入门手册,甚至是现有文档的详细概述参考。…

如何发布一个 TypeScript 编写的 npm 包

本文正在参加「金石计划 . 瓜分6万现金大奖」 原文链接:www.strictmode.io/articles/bu… 作者:strictmode.io 前言 在这篇文章中,我们将使用TypeScript和Jest从头开始构建和发布一个NPM包。 我们将初始化一个项目,设置TypeS…

关于在Interceptor拦截器中使用autowired注入,但是却注入为null。引出在自动装配时,只有在ioc容器中的bean可以互相自动装配。

问题描述 在拦截器拦截登录请求,想通过从redis中取出token,判断token是否为null,进而判断是否登录。 Component public class LoginInterceptor implements HandlerInterceptor {AutowiredStringRedisTemplate redisTemplate;Overridepubli…

基于matlab的SAR图像中自动目标识别

一、前言此示例演示如何使用深度学习工具箱和并行计算工具箱™™训练基于区域的卷积神经网络 (R-CNN) 以识别大场景合成孔径雷达 (SAR) 图像中的目标。深度学习工具箱提供了一个框架,用于设计和实现具有算法、预训练模…

MyBatis_自定义映射resultMap

自定义映射resultMap 文章目录自定义映射resultMap创建数据表实体类字段名和属性名不一致(三种方式)取别名设置全局配置设置resultMap处理多对一的映射关系(三种方式)级联方式处理association分步查询处理一对多的映射关系(两种方式)collection分步查询创建数据表 复制进MySQL…

强化学习笔记-03有限马尔可夫决策过程MDP

本文是博主对《Reinforcement Learning- An introduction》的阅读笔记,不涉及内容的翻译,主要为个人的理解和思考。 前文我们了解了强化学习主要是为了实现最大化某个特定目标(收益),而学习如何通过环境进行交互。 而学…

PCI Express体系结构导读_3PCI总线的数据交换--读书笔记

前言本文为读书笔记,如有误可以指正,一块学习交流本章节主要介绍两种类型的数据传输:a- host读写pci设备的bar寄存器。b- pci设备通过DMA方式读写内存。对于PCI设备读写其他PCI设备的bar寄存器只了解3.1- pci设备bar空间的初始化3.1.1 内存域…

33复杂美:一文看懂加密算法为何物

加密算法 ,区块链底层技术的心脏究竟为何物?加密,简而言之,加密就是借助一种或多种算法将明文信息转换成密文信息,信息的接收方通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,加…

C++:类和对象(下)

文章目录1 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字2 static成员2.1 概念2.2 特性3 友元3.1 友元函数&#xff08;流插入&#xff08;<<&#xff09;及流提取&#xff08;>>&#xff09;运算符重载&#xff09;3.2 友元类4 内部类5 匿名对…

使用脚本以可读的 JSON 格式显示 curl 命令输出

在我们经常调试微服务或者使用 Elasticsearch API 时&#xff0c;经常会使用curl 来进行调试。但是有时我们的输出不尽如意。显示的不是一 pretty 格式进行输出的。我们有时还必须借助于其他的一些网站工具&#xff0c;比如 Best JSON Formatter and JSON Validator: Online JS…

叮!一大波来自客户的感谢信

春风渐暖&#xff0c;美好如期&#xff0c;祝福的话语在日子的酝酿里更值得期待。神策数据走过 7 载春秋&#xff0c;描绘的大数据分析和营销科技图景在时间的打磨下清晰可见。时光沉淀经验&#xff0c;匠心兑换卓越&#xff0c;这条终点叫做「帮助中国三千万企业重构数据根基&…

类与对象(上)

类与对象(上) 1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间…

vite从零创建react-ts项目

1.创建vite-react-ts文件夹&#xff0c;初始化项目 npm init 初始化后可以看到包管理文件package.json 2.项目结构 根目录下新建index.html模板文件。以往都是放在public文件夹的&#xff0c;但是官方推荐放在根目录。这是有意而为之的&#xff1a;在开发期间 Vite 是一个服…

qt之条形码与二维码的生成

一、简介 条形码&#xff1a; 条形码(barcode)是将宽度不等的多个黑条和空白&#xff0c;按照一定的编码规则排列&#xff0c;用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条&#xff08;简称条&#xff09;和白条&#xff08;简称空&#xff09;排…

探讨接口测试以及其用例设计方法

接口测试的总结文档 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1a;主要介绍为什…

数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

目录 一.前言 二.leetcode160. 相交链表 1.问题描述 2.问题分析与求解 三.leetcode141. 环形链表 1.问题描述 2.代码思路 3.证明分析 下一题会用到的重要小结论&#xff1a; 四.leetcode142. 环形链表 II 1.问题描述 2.问题分析与求解 Judgecycle接口&#xf…

婴儿监视器美国亚马逊CPC认证ASTM F2951标准要求?

婴儿监视器&#xff0c;又称婴儿监听器、婴儿监护器&#xff0c;英文名为( baby monitor其主要用于用于居家和婴儿的监听和护理。欧美市场上广泛使用&#xff0c;已经存在30年历史的 Baby Monitor是采用现代无线电技术应用于居家和婴儿的监听和护理的好帮手。婴儿监护器由看器(…

基于Jeecgboot前后端分离的ERP系统开发系列--出库单(1)

这次从出库单开始进行整个单据录入显示的模板&#xff0c;不再采用默认的online表单代码生成的方式&#xff0c;以满足实际的业务需要&#xff0c;当然刚开始做&#xff0c;以后还需要进行改进。 一、首先单号生成 采用系统开发里的代码编码规则&#xff0c;相应的修改增加代码…

7、MyBatis框架——MyBatis对一对一关系的处理、分步查询、MyBatis对一对多关系的处理

目录 一、项目框架搭建 二、在实体类中添加额外属性实现多表查询 1、mybatis两表关联查询 &#xff08;1&#xff09;实体类类型映射规则 &#xff08;2&#xff09;代码演示 2、分步查询 &#xff08;1&#xff09;autoMapping开启自动映射 &#xff08;2&#xff09;…