Java面向对象——封装以及this关键字

封 装

封装是面向对象编程(OOP)的三大特性之一,它将数据和操作数据的方法组合在一个单元内部,并对外部隐藏其具体实现细节。在Java中,封装是通过类的访问控制修饰符(如 private、protected、public)和访问方法(getter 和 setter)来实现的。
在这里插入图片描述

访问控制修饰符

在Java中,类的成员可以使用不同的访问控制修饰符来控制其可见性。

private:只有同一个类内部的方法可以访问。

default(包级访问):同一个包内的类可以访问。

protected:同一个包内的类以及不同包中的子类可以访问。

public:任何类都可以访问。

Getter 和 Setter 方法

这些方法用于在类外部访问和修改类的私有属性。Getter 方法用于获取属性的值,Setter 方法用于设置属性的值。它们通常是公有方法,允许外部代码通过方法来访问属性,而不需要直接访问属性本身。

封装的优点

  • 数据隐藏: 封装隐藏了类的内部实现细节,防止外部代码直接访问和修改数据,从而提高了数据的安全性。

  • 代码灵活性: 封装使得类的内部结构可以更改,而不影响外部代码的使用。

  • 代码重用: 封装提供了接口来访问类的功能,使得其他代码可以重用类的功能而不需要了解内部实现细节。

封装的实现:

封装通过将类的成员声明为私有(private)来实现,然后通过公有(public)的 Getter 和 Setter 方法来提供对这些成员的访问和修改。

封装的应用场景:

封装在软件设计中的应用广泛,尤其适用于隐藏内部细节、提供良好的接口、确保数据安全性等场景。它有助于构建模块化、易于维护的代码。

不变性: 封装可以用于创建不变类(Immutable Class),即类的实例一旦创建就不能被修改,只能通过构造函数来初始化。

遮蔽(Shadowing)

是指一个作用域中使用了一个和外层作用域相同的变量名,导致局部变量“遮蔽”了外部变量,即无法直接访问外部变量

局部变量遮蔽成员变量

this关键字

this关键字更详细讲解点击这里
代表当前对象可以用于以下几个方面:

  1. 引用当前对象的成员方法

  2. 引用当前对象的成员变量

  3. 调用当前对象的构造方法

this只能在类的实例方法、实例初始化和构造方法中使用。不能在静态方法中使用。

总结

  1. 引用当前对象:

在类的非静态方法中,this 引用当前对象,即调用该方法的对象实例。

  1. 访问实例变量:

在类的方法中,可以使用 this 来访问当前对象的实例变量。

  1. 调用构造方法:

在一个构造方法内部,可以使用 this() 调用当前类的其他构造方法,实现代码的复用。

  1. 避免方法参数与实例变量同名:

当方法的参数名与实例变量同名时,可以使用 this 关键字来区分引用的是实例变量还是方法参数。

  1. 在构造方法中调用其他构造方法:

使用 this() 在构造方法中调用其他构造方法,以减少代码冗余。

  1. 在匿名内部类中:

在匿名内部类中,如果需要引用外部类的实例,可以使用 外部类名.this。

  1. 在静态方法中的限制:

this 不能在静态方法中使用,因为静态方法与特定对象实例无关。

  1. 构造方法中的 this 和 super 的关系:

构造方法中的 this() 和 super() 不能同时使用,因为它们都必须作为构造方法的第一行。

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

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

相关文章

Linux MQTT智能家居项目(智能家居界面布局)

文章目录 前言一、创建工程项目二、界面布局准备工作三、正式界面布局总结 前言 一、创建工程项目 1.选择工程名称和项目保存路径 2.选择QWidget 3.添加保存图片的资源文件: 在工程目录下添加Icon文件夹保存图片: 将文件放入目录中: …

网络层协议

网络层协议 IP协议基本概念协议头格式网段划分特殊的IP地址IP地址的数量限制私有IP地址和公网IP地址路由IP协议头格式后续 在复杂的网络环境中确定一个合适的路径 IP协议 承接上文,TCP协议并不会直接将数据传递给对方,而是交付给下一层协议,…

音视频FAQ(三):音画不同步

摘要 本文介绍了音画不同步问题的五个因素:编码和封装阶段、网络传输阶段、播放器中的处理阶段、源内容产生的问题以及转码和编辑。针对这些因素,提出了相应的解决方案,如使用标准化工具、选择强大的传输协议、自适应缓冲等。此外&#xff0…

uniapp微信小程序区分正式版,开发版,体验版

小程序代码区分是正式版,开发版,还是体验版 通常正式和开发环境需要调用不同域名接口,发布时需要手动更换 或者有些东西不想在正式版显示,只在开发版体验版中显示,也需要去手动隐藏 官方没有明确给出判断环境的方法&a…

SciencePub学术 | CCF推荐重点计算机SCIE征稿中

SciencePub学术 刊源推荐: CCF推荐重点计算机SCIE征稿中!信息如下,录满为止: 一、期刊概况: CCF推荐重点SCIE简介 【期刊简介】IF:4.0,JCR2区,中科院3区; 【版面类型】正刊&#…

Swift 基础

工程目录 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 点击下载代码:swift-01

记录一下基于jeecg-boot3.0的待办消息移植记录

因为之前没有记录,所以还要看代码进行寻找,比较费劲,所以今天记录一下: 1、后端 SysAnnouncementController 下面函数增加待办的几个显示内容给前端用 具体代码如下: /*** 功能:补充用户数据&#xff0c…

由小波变换模极大值重建信号

给定信号, 令小波变换的尺度 则x(t)的二进小波变换为 令为取模极大值时的横坐标,那么就是模极大值。 目标是由坐标、模极大值及最后一级的低频分量重建信号x(t) 为了重建x(t),假定有一信号集合h(t),该集合中信号的小波变换和x(…

打印出二进制的奇数位和偶数位

void print(int a) {int i0;printf("奇数位:");for(i30;i>0;i-2){printf("%d ",(a>>i)&1);}printf("\n");printf("偶数位:");for(i31;i>1;i-2){printf("%d ",(a>>i)&1);} …

Linux MQTT智能家居(温度,湿度,环境监测,摄像头等界面布局设置)

文章目录 前言一、温度湿度曲线布局二、环境监测界面布局三、摄像头界面布局总结 前言 本篇文章来完成另外三个界面的布局设置。 这里会使用到 feiyangqingyun的一些控件库。 一、温度湿度曲线布局 TempHumtiy.h: #ifndef TEMPHUMTIY_H #define TEMPHUMTIY_H#include <…

使用Python批量将Word文件转为PDF文件

说明&#xff1a;在使用Minio服务器时&#xff0c;无法对word文件预览&#xff0c;如果有需要的话&#xff0c;可以将word文件转为pdf文件&#xff0c;再存储到Minio中&#xff0c;本文介绍如何批量将word文件&#xff0c;转为pdf格式的文件&#xff1b; 安装库 首先&#xff…

Python系统学习1-9-类一之类语法

一、类之初印象 1、类就是空表格&#xff0c;将变量&#xff08;列名&#xff09;和函数&#xff08;行为&#xff09;结合起来 2、创建对象&#xff0c;表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…

vue项目根据word模版导出word文件

一、安装依赖 //1、docxtemplaternpm install docxtemplater pizzip -S//2、jszip-utilsnpm install jszip-utils -S//3、pizzipnpm install pizzip -S//4、FileSaver npm install file-saver --save二、创建word模版 也就是编辑一个word文档&#xff0c;文档中需要动态取值的…

【JAVA】数组练习

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 数组练习 1. 数组转字符串2. 数组拷贝3.…

在vue中使用swiper轮播图(搭配watch和$nextTick())

在组件中使用轮播图展示图片信息&#xff1a; 1.下载swiper,5版本为稳定版本 cnpm install swiper5 2.在组件中引入swiper包和对应样式&#xff0c;若多组件使用swiper&#xff0c;可以把swiper引入到main.js入口文件中&#xff1a; import swiper/css/swiper.css //引入swipe…

SpringBoot系列---【SpringBoot在多个profiles环境中自由切换】

SpringBoot在多个profiles环境中自由切换 1.在resource目录下新建dev&#xff0c;prod两个目录&#xff0c;并分别把dev环境的配置文件和prod环境的配置文件放到对应目录下&#xff0c;可以在配置文件中指定激活的配置文件&#xff0c;也可以默认不指定。 2.在pom.xml中最后位置…

07微服务的事务管理机制

一句话导读 在单体应用程序中&#xff0c;事务通常是在单个数据库或单个操作系统中管理的&#xff0c;而在微服务架构中&#xff0c;事务需要跨越多个服务和数据库&#xff0c;这就使得事务管理变得更加复杂和困难。 目录 一句话导读 一、微服务事务管理的定义和意义 二、微…

Layui列表表头去掉复选框改为选择

效果&#xff1a; 代码&#xff1a; // 表头复选框去掉改为选择 $(".layui-table th[data-field"0"] .layui-table-cell").html("<span>选择</span>");

做好以下几点,可以让我们延长周末体验感,好好放松!!!

工作以后常常容易感到疲于奔命&#xff0c;让我们找到适合自己方式&#xff0c;来让我们度过一个充实放松的周末! 方向一&#xff1a;分享你周末的时间规划 我们可以把每个月当做一个周期&#xff0c;制定一个简单的计划&#xff0c;如&#xff1a;第一周&#xff0c;锻炼身体…

基于Prometheus监控Kubernetes集群

目录 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装flannel、cni 2.8、部署测…