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

news2024/9/22 21:21:21

封 装

封装是面向对象编程(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.coloradmin.cn/o/891099.html

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

相关文章

Android Drawable转BitmapDrawable再提取Bitmap,Kotlin

Android Drawable转BitmapDrawable再提取Bitmap&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"…

C++ 结构体的对齐

C 结构体的对齐 flyfish 文章目录 C 结构体的对齐一 非对齐方式二 对齐方式示例1示例2 三 对齐到指定字节数 boundary 一 非对齐方式 也就是按照1字节对齐 #pragma pack(1) typedef unsigned char BYTE; typedef struct message {BYTE a[4];BYTE b[2];BYTE *c;BYTE d[4];} M…

阿里云ECS服务器企业级和共享型介绍_企业级常见问题解答FAQ

阿里云企业级服务器是什么&#xff1f;企业级和共享型有什么区别&#xff1f;企业级服务器具有独享且稳定的计算、存储、网络资源&#xff0c;如ECS计算型c6、通用型g8等都是企业级实例&#xff0c;阿里云百科分享什么是企业级云服务器、企业级实例的优势、企业级和共享型云服务…

如何收缩wsl2虚拟磁盘

简介 WSL2使用虚拟化层为它带来更高的性能和兼容性。但是&#xff0c;WSL2 的少数缺点之一是它使用虚拟磁盘 &#xff08;VHDX&#xff09; 来存储文件系统。这意味着您的虚拟磁盘占用了 100GB&#xff0c;但 WSL2 只需要 15GB... 所以要寻找一种缩小 WSL2 虚拟磁盘的方法&…

​Redis概述

目录 Redis - 概述 使用场景 如何安装 Window 下安装 Linux 下安装 docker直接进行安装 下载Redis镜像 Redis启动检查常用命令 Redis - 概述 redis是一款高性能的开源NOSQL系列的非关系型数据库,Redis是用C语言开发的一个开源的高键值对(key value)数据库,官方提供测试…

Leetcode每日一题:1444. 切披萨的方案数(2023.8.17 C++)

目录 1444. 切披萨的方案数 题目描述&#xff1a; 实现代码与解析&#xff1a; 二维后缀和 动态规划 原理思路&#xff1a; 1444. 切披萨的方案数 题目描述&#xff1a; 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; A …

根据Dockerfile创建容器案例讲解

-f为dokerfile的路径&#xff0c; -t为新镜像的名称及版本。 后面这个点是寻址路径。

【第三阶段】kotlin语言的字符串遍历操作

fun main() {val str1:String"AFWSDKFJWIUHGWINUWVRV"str1.forEach(){ it->println("所有字符&#xff1a;$it")} }执行结果

移动折叠隔断设计,自由与灵感的展现

移动折叠隔断设计可以展现自由与灵感的多样性&#xff0c;以下是一些相关的设计思路&#xff1a; 多样的材质选择&#xff1a;折叠隔断可以采用各种材质&#xff0c;如玻璃、木材、金属等&#xff0c;每种材质都有独特的质感和表现力。可以根据设计需求选择合适的材质&#xff…

数据结构—树表的查找

7.3树表的查找 ​ 当表插入、删除操作频繁时&#xff0c;为维护表的有序表&#xff0c;需要移动表中很多记录。 ​ 改用动态查找表——几种特殊的树 ​ 表结构在查找过程中动态生成 ​ 对于给定值key ​ 若表中存在&#xff0c;则成功返回&#xff1b; ​ 否则&#xff0…

postgresql 分类排名

postgresql 分类排名 排名窗口函数示例CUME_DIST 和 NTILE 排名窗口函数 排名窗口函数用于对数据进行分组排名。常见的排名窗口函数包括&#xff1a; • ROW_NUMBER&#xff0c;为分区中的每行数据分配一个序列号&#xff0c;序列号从 1 开始分配。 • RANK&#xff0c;计算每…

okhttp源码简单流程分析

拦截器详细解析可以看大佬简书 "https://www.jianshu.com/p/6fac73f7570f"和 “https://www.jianshu.com/p/3c740829475c” okhttp请求流程 1&#xff1a;OkHttpClient okHttpClient new OkHttpClient.Builder() 构建一个okhttpClient对象&#xff0c;传入你想传入的…

Wlan——锐捷AC冗余方案讲解(集群AC、热备AC、VAC)

目录 无线AC集群 AC集群的原理 AC集群的实现方式与配置 通过AC集群实现负载分担 AP的Failover优先级 优缺点 无线AC热备 AC热备的基本概念 AC热备工作原理 保活报文类型 热备工作模式 热备AC的配置 故障检查 优缺点 无线VAC VAC的基本概念 VSL链路和业务链路 …

软件需求-架构师之路(五)

软件需求 软件需求&#xff1a; 指用户 对系统在功能、行为、性能、设计约束等方面的期望。 分为 需求开发 和 需求管理 两大过程。 需求开发&#xff1a; 需求获取需求分析需求定义&#xff08;需求规格说明书&#xff09;需求验证&#xff1a;拉客户一起评审&#xff0c…

Vim在Mac电脑中的下载与安装方法:MacVim

本文介绍在Mac系统电脑中&#xff0c;下载、安装文本编辑器Vim软件&#xff08;MacVim软件&#xff09;的具体方法。 在Mac系统电脑中&#xff0c;原本就带有一个非图形界面的Vim&#xff1b;只要我们在终端中&#xff0c;输入如下的代码&#xff0c;就可以查看系统自带的非图形…

win10在vmware16.2.3上安装macos13.1系统

第一步、安装vmware版本信息如下 第二步、下载unlocker426放到安装文件夹 第三步、管理员身份运行unlock.exe 第四步、运行vmware新建虚拟机 第五步、启动新创建的虚拟机macOS13.1并选择语言 第六步、选择磁盘工具抹掉格式化安装磁盘 第七步、格式化完成后退出磁盘工具 第八步、…

网工内推 | 外企网工,带专业培训,NP认证优先

01 广州开讯通信技术有限公司 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;职责描述&#xff1a; 1、负责组织制定系统集成项目的技术方案编写、标书的准备、讲解及用户答疑等工作; 2、配合客户经理完成与用户的技术交流、技术方案宣讲、系统演示等工作; 3、配…

【第三阶段】kotlin语言中的==与===比较操作

"" 内容的比较 相当于Java的equals() "" 引用的比较 1. fun main() {val str1"kotlin"val str2"kotlin"//java写法println(str1.equals(str2))//kt写法println(str1str2)//结论 str1.equals(str2)等价于str1str2 }执行结果 2. fu…

appium2 安装 和出现问题解决

1.安装环境 A macOS, Linux, or Windows operating systemNode.js version in the SemVer range ^14.17.0 || ^16.13.0 || >=18.0.0NPM version >= 8 (NPM is usually bundled with Node.js, but can be upgraded independently) 1.1只要安装nodejs最新版就好了 1.2安…

leetcode473. 火柴拼正方形(回溯算法-java)

火柴拼正方形 leetcode473 火柴拼正方形题目描述回溯算法 上期经典算法 leetcode473 火柴拼正方形 难度 - 中等 原题链接 - leetcode473 火柴拼正方形 题目描述 你将得到一个整数数组 matchsticks &#xff0c;其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍…