【Java面向对象编程(中)】- 探索封装的秘密

news2025/1/12 12:29:06

🌈个人主页: Aileen_0v0
🔥系列专栏:Java学习系列专栏
💫个人格言:"没有罗马,那就自己创造罗马~" 



目录

回顾

封装​编辑

为什么进行封装 ​​编辑​

如何调用私有的变量 ​​编辑​

1.get + set方法(当形参和成员变量不同名时)​编辑

2. get + set + this(形参名不小心与成员变量名相同时)​编辑

  📝总结


回顾

上次我们学习了Java 面向对象编程的 类,方法及属性

以及Java中静态成员方法和变量,实例成员方法和变量的使用

若有遗忘点击👉🔗http://t.csdnimg.cn/xp3Ls


今天我们学习Java面向对象编程的特性 - 封装和this的使用

封装

封装是面向对象编程中的一种重要概念,是将数据和操作数据的方法包装在一起的机制

Java中的封装可以通过访问控制修饰符(public、private、protected、default)来实现

通过将数据私有化(使用private关键字)只能通过公共的方法(getters和setters)来访问和修改数据,从而保证了数据的安全性和可控性。

封装也是实现信息隐藏的重要方式,避免了对外暴露实现细节。同时,通过封装还可以提高代码的重用性和可维护性,因为修改数据的实现细节只需要在类的内部进行,不会影响到类的外部使用

 如果一个类的属性或方法被private修饰以后,只能在类里面被使用

 


为什么进行封装 

如果name是共有的不进行封装,实现者若改了属性name的名字,调用者完全不知道实现者改了属性,所以我们才要进行封装.


如何调用私有的变量 

如果调用者想要调用实现者的私有变量,可以通过get和set方法,或者get + set + this进行私有变量的调用 

this写在哪个类里面,就表示哪个类对象的引用

方法变成private,那么这个方法也只能在当前类里面使用

1.get + set方法(当形参和成员变量不同名时)

/**
 * 
 */
package Test;

/**
 * 
 * 封装: 用 private 来修饰属性 或者 方法
 * 限定你只能在类当中被使用
 * 
 * 
 */
class Student{
	public int age;//实例变量
	//封装 name  限定你只能在类当中进行访问
	private String MyName;//实例变量
	
	
	//首先通过set方法设置传入的名字
	public void setMyName(String name) {
		MyName = name;
	}
	
	//然后提供一个公开的接口
	public String getMyName() {
		return MyName;
	}
	


	public void funcl() {
		System.out.println("func1()");
	}
	public void show() {
		System.out.println("我叫" + MyName + ",今年" + age + "岁"); 
	}
}

// 

public class TestDemo1 {
	public static void main(String[] args) {
		Student student = new Student();//person为对象的引用
		student.setMyName("🐖");//方法--->传参
		String str = student.getMyName();

		System.out.println(str);

	}

 }

2. get + set + this(形参名不小心与成员变量名相同时)

this 引用指向当前对象 ( 成员方法运行时调用该成员方法的对象 ) ,在成员方法中所有成员变量的操作,都是通过该 引用去访问 。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

/**
 * 
 */
package Test;

/** 
 * 封装: 用 private 来修饰属性 或者 方法
 * 限定你只能在类当中被使用
 *
 * this: 当前对象的 引用
 * 要习惯使用this
 */
class Student{
	public int age;//实例变量
	//封装 name  限定你只能在类当中进行访问
	private String MyName;//实例变量
	
	
	//首先通过set方法设置传入的名字
	public void setMyName(String MyName) {
		this.MyName = MyName;//其实就是 自己给自己赋值 并没有赋值属性 局部变量优先
		//this.MyName 指的是 Student 这个的对象的 private成员变量MyName~
	}
	//然后提供一个公开的接口
	public String getMyName() {
		return this.MyName;
	}

	private void funcl() {
		System.out.println("func1()");
	}
	public void show() {
		System.out.println("TA叫" + this.MyName + ",今年" + this.age + "岁"); 
	}
}
public class TestDemo1 {
	public static void main(String[] args) {
		Student student = new Student();//person为对象的引用
		student.setMyName("🐖");//方法--->传参
		String str = student.getMyName();
		System.out.println(str);
		student.show();

	}

 }

  📝总结

本文主要是介绍Java面向对象编程中封装是什么以及它的作用,还有关键字this的作用

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

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

相关文章

LeetCode | 138. 随机链表的复制

LeetCode | 138. 随机链表的复制 OJ链接 思路: 题目要求我们拷贝一个带next指针与random随机访问指针的链表。 如果只拷贝一个只带next的指针,直接遍历目标链表依次拷贝每个节点的信息就可以了~~ 拷贝节点插入到原节点的后面处理copy节点的randomcop…

Leetcode—103.二叉树的锯齿形层序遍历【中等】

2023每日刷题(二十六) Leetcode—103.二叉树的锯齿形层序遍历 BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of ar…

138.随机链表的复制(LeetCode)

深拷贝,是指将该链表除了正常单链表的数值和next指针拷贝,再将random指针进行拷贝 想法一 先拷贝出一份链表,再对于每个节点的random指针,在原链表进行遍历,找到random指针的指向,最后完成拷贝链表random…

第一百六十八回 NavigationBar组件

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何修改按钮的形状"相关的内容,本章回中将 介绍NavigationBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

Linux驱动开发——PCI设备驱动

目录 一、 PCI协议简介 二、PCI和PCI-e 三、Linux PCI驱动 四、 PCI设备驱动实例 五、 总线类设备驱动开发习题 一、 PCI协议简介 PCI (Peripheral Component Interconnect,外设部件互联) 局部总线是由Intel 公司联合其他几家公司一起开发的一种总线标准&#…

初识-Servlet (第一个 Servlet 程序详解)

Servlet 是什么? Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序员的 API, 帮助程序员简单高效的开发一个 web app. 静态页面就只是单纯的 html 动态页面则是 html 数据 第一个 Servlet 程序 我们写一个 hello world 预期写一个 Servlet 程序, 部署到 Tomca…

图论12-无向带权图及实现

文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上,增加边的权。 使用TreeMap存储边的权重。 遍历输入文件,创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap,存储相邻的边和权重 …

时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果

官方论文地址->官方论文地址 官方代码地址->官方代码地址 个人修改代码->个人修改的代码已经上传CSDN免费下载 一、本文介绍 本文给大家带来是DLinear模型,DLinear是一种用于时间序列预测(TSF)的简单架构,DLinear的核…

Leetcode刷题详解—— 目标和

1. 题目链接:494. 目标和 2. 题目描述: 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可…

【计算机网络笔记】IP分片

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

有没有实时检测微信聊天图片的软件,只要微信收到了有二维码的图片就把它提取出来?

10-2 如果你有需要自动并且快速地把微信收到的二维码图片保存到指定文件夹的需求,那本文章非常适合你,本文章教你如何实现自动保存微信收到的二维码图片到你指定的文件夹中,助你快速扫码,比别人领先一步。 首先需要准备好的材料…

19 异步通知

一、异步通知 1. 异步通知简介 阻塞和非阻塞两种方式都是需要应用程序去主动查询设备的使用情况。 异步通知类似于驱动可以主动报告自己可以访问,应用程序获取信号后会从驱动设备中读取或写入数据。 异步通知最核心的就是信号: #define SIGHUP 1 /* 终…

openssl研发之base64编解码实例

一、base64编码介绍 Base64编码是一种将二进制数据转换成ASCII字符的编码方式。它主要用于在文本协议中传输二进制数据,例如电子邮件的附件、XML文档、JSON数据等。 Base64编码的特点如下: 字符集: Base64编码使用64个字符来表示二进制数据…

UPLAOD-LABS2

less7 任务 拿到一个shell服务器 提示 禁止上传所有可以解析的后缀 发现所有可以解析的后缀都被禁了 查看一下源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists($UPLOAD_ADDR)) {$deny_ext array(".php",".php5&quo…

password game

目录 password game (1-2) (3) (4) (5) (6) (7) (8) (9) (10&am…

CCF ChinaSoft 2023 论坛巡礼|机器人大模型与具身智能挑战赛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

第一百六十九回 如何修改NavigationBar的形状

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何修改按钮的形状"相关的内容,本章回中将介绍NavigationBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

【java进阶】集合的三种遍历(迭代器、增强for、Lambda)

目录 一、先谈集合: 二、单列集合的三种遍历方式 迭代器遍历 增强for遍历 Lambda表达式遍历 一、先谈集合: 🔥那我们平常用for循环依赖下标遍历不行嘛,这就与集合的分类有关了。 集合的体系结构: collection是单…

我的前端笔记JS

js介绍 js是编程语音,之前学的html和css是标记语言 百度搜索mdn官网就可以 语法 输出、对话框、控制台日志、输入对话框 字面量 简单理解就是看到的内容是属于什么类型,例如1232,这个是属于数字字面量

【C++】this指针讲解超详细!!!

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …