【java学习】面向对象特征之一:封装和隐藏(23)

news2024/10/7 8:29:17

文章目录

  • 信息的封装和隐藏


信息的封装和隐藏

    Java 中通过将数据声明为私有的 (private) 变量, 再提供 公共的( public )方法getXxx()setXxx() 实现对该属性的操作,以实现下述目的:

  • 隐藏一个类中不需要对外提供的实现细节;
  • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
  • 便于修改,增强代码的可维护性;

举例说明:
创建一个person类

package day06;

public class Person {
	public int age;//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题。所以需要封装和隐藏
	
	public void printAge() {
		System.out.println("年龄是:" + age);
	}
	
}

编写Test.java对Person类进行调用:

package day06;

public class Test {
	public static void main(String[] args) {
		Person p = new Person();
		p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
		
		p.printAge();
	}

}

运行结果:
在这里插入图片描述
    但是,这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑

对上述代码进行改写:使用封装和隐藏
改写Person类:

package day06;

public class Person {
//	public int age;//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题。所以需要封装和隐藏
	
	//我们需要对这样的不能让调用者随意使用的属性做封装和隐藏
	private int age;
	
	public void printAge() {
		System.out.println("年龄是:" + age);
	}
	
	public void setAge(int a) {
		if(a <= 150 && a >= 0) {
			age = a;
		}else {
			System.out.println("输入的年龄:" + a + "不在0~150之间");
		}
	}

}

改写Test.java:
情况1:这次仍然将age赋值-100,看一下运行结果会有什变化?

package day06;

public class Test {
	public static void main(String[] args) {
		Person p = new Person();
//		p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
		//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题
		
		p.setAge(-100);
		p.printAge();
	}

}

运行结果:
在这里插入图片描述
因为-100不在Person类中setAge所设定的年龄范围,所以最后输出的是age的默认值0。

情况2:将age赋值12

package day06;

public class Test {
	public static void main(String[] args) {
		Person p = new Person();
//		p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
		//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题
		
		p.setAge(12);
		p.printAge();
	}

}

运行结果:
在这里插入图片描述

小结:
在这里插入图片描述

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

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

相关文章

LeetCode【100】单词拆分

题目&#xff1a; 代码&#xff1a; public boolean wordBreak(String s, List<String> wordDict) {Set<String> dictSet new HashSet<>(wordDict);boolean[] dp new boolean[s.length() 1]; // dp问题均是&#xff0c;先构造dp数组&#xff0c;大小为…

vue实现搜索文字高亮功能

在前端开发中&#xff0c;要实现文字搜索高亮效果&#xff0c;你可以使用JavaScript来搜索文本并通过CSS或其他方式对匹配的文本进行高亮处理。以下是一种常见的方法&#xff1a; 实现步骤&#xff1a; 1、 获取用户输入的搜索词。 2、创建一个正则表达式&#xff0c;以全局&am…

分享一下微信付费文章功能怎么做

微信付费文章功能是一种基于微信公众号的文章付费阅读模式&#xff0c;它可以帮助公众号运营者实现文章内容的变现&#xff0c;提高文章的阅读量和收益。本文将介绍微信付费文章功能的制作流程、功能特点、使用流程和推广策略&#xff0c;帮助读者了解如何制作一个高效的微信付…

嵌入式C语言自我修养《内存堆栈管理》学习笔记

目录 一、Linux环境下的内存管理 二、栈的管理 三、堆内存管理 四、mmap映射区 五、内存泄漏与防范 六、常见的内存错误及检测 C程序中定义的函数、全局变量、静态变量经过编译链接后&#xff0c;分别以section的形式存储在可执行文件的代码段、数据段和BSS段中。当程序运…

vue 本地上传Excel文件并读取内容

陌路遇见&#xff0c;陌路告别&#xff0c;陌路问好&#xff0c;九月再见&#xff0c;十月重现! 首先我来讲解一下我的思路&#xff1a; 首先&#xff0c;在模板部分&#xff0c;我们有以下元素&#xff1a; <input type“file” change“handleFileUpload” accept“.xlsx…

哈希应用之布隆过滤器

文章目录 1.介绍1.1百度搜索1.2知乎好文1.3自身理解 2.模拟实现2.1文档阅读2.2代码剖析 3.误判率的研究4.布隆过滤器的应用4.1如何找到两个分别有100亿个字符串的文件的交集[只有1G内存].分别给出精确算法和近似算法4.2如何扩展BloomFilter使得它支持删除元素的操作 5.整体代码…

第十章 字符串和日期

1.字符串 1.1.String 1.1.1.String特性 代表字符串。Java 程序中的所有字符串字面值&#xff08;如 "abc" &#xff09;都作为此类的实例实现&#xff1b;String是一个final类&#xff0c;代表不可变的字符序列,不可被继承&#xff1b;字符串是常量&#xff0c;用&…

高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求

今天我将与大家分享一种强大的网络调试技巧&#xff0c;那就是使用Charles Proxy来捕获和修改HTTP/HTTPS请求。如果您是一位开发人员或者网络调试爱好者&#xff0c;那么这个工具肯定对您有着很大的帮助。接下来&#xff0c;让我们一起来学习如何使用Charles Proxy进行高级网络…

1200*C1. k-LCM (easy version)(找规律)

Problem - 1497C1 - Codeforces 解析&#xff1a; 找规律即可&#xff0c;分为偶数的一半是偶数、偶数的一半是奇数、奇数三种情况 分别为 &#xff08;n/2&#xff0c;n/4&#xff0c;n/4&#xff09;&#xff08;n/2-1&#xff0c;n/2-1&#xff0c;2&#xff09;&#xff08…

canvas基础2 -- 形状

七巧板 七巧板本质上就是 分别由几个直线 拼成一个个图形&#xff0c;再将这些图形结合起来 var tangram [{ p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: "#caff67" },{ p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], col…

为什么3ds max渲染效果图有噪点?点进来,CG Magic告诉您!

大家在使用3ds max渲染效果图时&#xff0c;可能渲染结果往往会出现的都是不真实&#xff0c;有小伙伴会问如何使3dmax渲染效果图真实呢&#xff1f; 不真实就算了&#xff0c;渲染过程中&#xff0c;会出现3Dmax渲染噪点多这类问题。 什么原因3ds max渲染效果图有噪点呢&a…

满足新能源三电系统气密和电性能测试的E10系列多功能电连接器

在新能源汽车的测试领域中&#xff0c;三电系统的测试是质量管控过程中非常重要的组成部分。无论是防水防尘的气密性测试&#xff0c;还是EOL/DCR等电性能相关的测试&#xff0c;都是确保新能源汽车正常工作中不可缺少的一部分。 在以往的测试中&#xff0c;每种测试都是独立的…

海外问卷调查是不是很枯燥?

嘿&#xff0c;大家好&#xff01;我是橙河&#xff0c;这几年海外问卷调查这个项目很火热&#xff0c;这个项目看起来很高大上&#xff0c;实际上门槛并不高&#xff0c;甚至做的过程很枯燥。 海外问卷调查这个项目&#xff0c;被很多人称为“网络搬砖”&#xff0c;形容的也…

C++day05(运算符重载、静态成员、继承)

今日任务 1> 思维导图 2> 多继承代码实现沙发床 代码&#xff1a; #include <iostream>using namespace std; class Sofa { private:string sitting; public:Sofa() {}Sofa(string s):sitting(s){cout << "Sofa 有参" <<endl;}void show…

基于 AdaFace 提供适合低质量人脸识别的人脸特征向量输出服务

写在前面 工作原因,简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对大众理想的懦弱回…

如何选择高防CDN和高防IP?

目录 前言 一、对高防CDN的选择 1. 加速性能 2. 抗攻击能力 3. 全球覆盖能力 4. 可靠性和稳定性 二、对高防IP的选择 1. 防御能力 2. 服务质量 3. 安全性 4. 价格 三、高防CDN和高防IP的优缺点对比 1. 高防CDN的优缺点 2. 高防IP的优缺点 总结 前言 随着互联网…

04-RocketMQ源码解读

目录汇总&#xff1a;RocketMQ从入门到精通汇总 上一篇&#xff1a;03-RocketMQ高级原理 这一部分&#xff0c;我们开始深入RocketMQ的源码。源码的解读是个非常困难的过程&#xff0c;每个人的理解程度都会不一样&#xff0c;也不太可能通过讲解把其中的细节全部讲明白。我们今…

【Zabbix】Zabbix学习笔记

现在Zabbix Server存在的问题&#xff1a; 问题1&#xff1a; Zabbix server: Utilization of discoverer processes over 75% 问题2&#xff1a; Zabbix server: Utilization of icmp pinger processes over 75% 优化的解决办法是修改配置文件把Discovery和Pinger进程数量调大…

windows10下 iperf3测试带宽

iperf3下载网址&#xff1a;iPerf - Download iPerf3 and original iPerf pre-compiled binaries 可以用来测试TCP以及UDP带宽质量 通俗来说是用来测试网速的 准备&#xff1a;两台设备 1. 根据自己的设备选择下载工具&#xff08;两台都要有&#xff0c;这里我用的Window…

R语言的计量经济学实践技术应用

计量经济学通常使用较小样本&#xff0c;但这种区别日渐模糊&#xff0c;机器学习在经济学领域、特别是经济学与其它学科的交叉领域表现日益突出&#xff0c;R语言是用于统计建模的主流计算机语言&#xff0c;在本次培训中&#xff0c;我们将从实际应用出发&#xff0c;重点从数…