Java面向对象封装--学习笔记

面向对象三大特征:封装、继承、多态


什麽是封装?

  • 就是用类设计对象处理某一个事务的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去
            用通俗一点的话来说就是设计对象时应该把要使用到的数据和使用这些数据的方法都写到对象中,比如:
    public class Dog {String name;    //名字String kind;    //品种public void bark(){ //发出叫声方法System.out.println(kind + name +"在汪汪叫");}
    }

    比如我们要使用发出叫声方法,需要使用到name,和kind成员变量,所以我们应该把它们都放到Dog类中
    显然,平常写类都是这麽写的,那么封装性还有什麽值得注意的点呢?当然有,那就是↓


封装的设计规范

在我们平常设计类的时候,其实是有 一个封装的设计规范的,其核心思想为下面八个字:

合理隐藏,合理暴露

那么什麽是合理隐藏、合理暴露呢?
我们平常在设计类对象时,一般是会有多个成员变量和多个成员方法的,对于这些成员,一个好的对象设计,应该是合理安全的暴露,而对于那些不该暴露的,我们应该统统隐藏起来
举个比喻:计算机
我们知道,计算机是由软件和硬件组成的,而在硬件和软件中其实暴露给我们的都只是一部分,比如我们平常要使用的外设:键盘鼠标开机按钮之类,像存储器、处理器这些都是集成在主板上,用铁皮盒子(机箱)包起来的

我们在设计类时也应该是这样的,不应该随便把类的成员变量全部暴露给别人,这样既不安全也徒增烦恼

举个栗子,有一个学生类长这样:

public class Student {double score;public void result(){System.out.println(this.score > 60 ? "及格" : "不及格");}
}

那么在这个类中,score成员变量应该暴露还是隐藏呢?

明显我们是要使用score类,所以是要给它赋值的,应该暴露,但是出于防止有人乱赋不合法的值,我们又应该隐藏,那我们到底应该怎么办呢?

怎麽才能做到可以赋值又防止瞎赋值呢?

其实很简单,我们首先把这个变量隐藏,然后设计公开的方法去赋值和获得它就好了,如果要想控制不让随便赋值,就在对应方法里面加限制语句就ok了

比如:

public class Student {private double Score;public void setScore(double score){if(score >= 0 && score <= 120)this.Score = score;elseSystem.out.println("请输入正确的分数!");}public double getScore(){return this.Score;}public void result(){System.out.println(this.Score > 60 ? "及格" : "不及格");}
}

然后再去赋值就不用怕乱赋值了,在保护数据的同时不影响赋值取值:

public class Test {public static void main(String[] args) {Student s = new Student();s.setScore(100);System.out.println(s.getScore());s.result();}
}

怎样做到合理隐藏,合理暴露?

一句话总结:将所有的成员变量隐藏起来,然后设计对应的赋值取值方法暴露给外界访问,这样就可以做到合理隐藏,合理暴露

那关于方法的隐藏和暴露呢?

也很简单,只需要看方法需不需要供外界使用,需要的话就公开不需要的话就隐藏,像上面的result方法显然就是需要供外界访问的,所以应该设置为公开


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

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

相关文章

服务雪崩简单的介绍

定义 服务雪崩效应是一种因“服务提供者的不可用”&#xff08;原因&#xff09;导致“服务调用者不可用”&#xff08;结果&#xff09;&#xff0c;并将不可用逐渐放大的现象。如下图所示&#xff1a; 上图中, A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的…

浙大链协2023年终总结

2 0 2 4 元旦 快乐 龙腾虎跃 01 引言 俗话说&#xff1a;"币圈一天&#xff0c;人间十年"&#xff0c;数字货币一天的涨跌可能抵上其他资产价格一年的波动幅度。而经历过漫长的熊市后&#xff0c;铭文的火爆十分生动地表述了这一口号...... 2023年&#xff0c;浙大链…

针对工行的LockBit勒索软件攻击表明了全球金融系统对网络攻击的脆弱性

内容概要&#xff1a; 11月8日&#xff0c;工行一家美国子公司被勒索软件入侵导致美国国债交易业务瘫痪&#xff0c;暴露了全球金融系统易受网络攻击的脆弱性。LockBit勒索软件集团声称对工行的攻击负责。工行是世界上资产规模最大的银行&#xff0c;管理着5.7万亿美元。这一网…

前端学习笔记 3:Vue 工程

前端学习笔记 3&#xff1a;Vue 工程 上一篇文章介绍了如何在单一 Html 页面中使用 Vue&#xff0c;本文介绍如何从头开始用 Vue 构建一个前端工程项目。 环境准备 Vue 框架代码的创建依赖于 Node.js&#xff0c;因此需要先安装 Node.js。 创建和启动 创建 通过以下命令可…

Spring通信传参的方法

Spring通信传参的方法 目录概述需求&#xff1a; 设计思路实现思路分析1.简单参数传递2.复合参数3.动态参数 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better resul…

C#中字母与ASCⅡ码的转换

目录 一、关于ASCⅡ及与字符互转 1.主要用到Encoding对象的GetBytes方法 2.Char显式转换为数值类型得到ASCⅡ 二、实例 三、生成效果 四、程序中的一些知识点 1.IsLetterOrDigit() 2.GetBytes() 3.TryParse(string, out int) 一、关于ASCⅡ及与字符互转 ASCⅡ(Americ…

计算机网络的接口

计算机网络接口是计算机与网络通信设备之间进行通信的重要部分&#xff0c;它提供了计算机连接到网络的物理和逻辑接口&#xff0c;是计算机进行网络通信的重要组成部分。本文将介绍计算机网络接口的基本概念&#xff0c;不同类型的网络接口及其特点&#xff0c;以及在实际应用…

KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复

不少小伙伴&#xff0c;求助电脑报错“KBDNO1.DLL文件缺失&#xff0c;软件或游戏无法启动或运行”&#xff0c;应该怎么办&#xff1f; 首先&#xff0c;我们先来了解“KBDNO1.DLL文件”是什么&#xff1f; KBDNO1.DLL是Windows操作系统中的一个动态链接库文件&#xff0c;主…

连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver‘,亲测有效!!!

Jmeter连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver’ 1.到官方下载驱动注意&#xff1a;根据项目的JDK版本来下载对应的驱动Download | pgJDBC 2.将postgresql-42.2.27.jar复制到lib目录下面&#xff0c; 然后重新启动 连接driver信息如下&#…

【LeetCode:69. x 的平方根 | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

印尼小胖子表情包大全

印尼小胖子tatan表情包大全 想要更多表情包&#xff0c;访问cmay表情包大全

二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历(leetcode)

目录 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 方法二&#xff1a;传址调用记录节点个数 二、二叉树的最大深度 三、平衡二叉树 四、二叉树遍历 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 计算树的节点数: 函数TreeSize用于递…

机器视觉在医学影像与医疗领域的应用及前景

引言 随着人工智能技术的飞速发展&#xff0c;机器视觉在医学影像和医疗领域中扮演着越来越重要的角色。机器视觉技术如何在医院领域提高诊断准确性、加快治疗流程以及改善患者体验。本文将探讨机器视觉算法的重要性、使用场景&#xff0c;并对其在医院领域应用的前景提出个人见…

计算机毕业设计-----SSM场地预订管理系统

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 按分类查看场地,用户登录,查看网站公告,按分类查看器材,查看商品详情,加入购物车,提交订单,查看订单,修改个人信息等功能。 管理员角…

分布式【Zookeeper】

1.1 ZooKeeper 是什么 ZooKeeper 是 Apache 的顶级项目。ZooKeeper 为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面&#xff0c;ZooKeeper 并没有直接采用 Paxos 算法&…

爬虫工作量由小到大的思维转变---<第三十四章 Scrapy 的部署scrapyd+Gerapy>

前言: scrapy-redis没被部署,感觉讲起来很无力;因为实在编不出一个能让scrapy-redis发挥用武之地的案子;所以,索性直接先把分布式爬虫的部署问题给讲清楚!! 然后,曲线救国式地再在部署的服务器上,讲scrapy redis我感觉这样才好! 正文: 现在还有不少人在用scrapy web进行爬虫管…

2024,启动(回顾我的2023)

零.前言 打开博客想写个年度总结&#xff0c;发现已经半年没有更新文章了&#xff0c;排名从几千掉到了几万&#xff0c;不过数据量还是不错的。 时间过得可真快&#xff0c;2023年是充满动荡的一年&#xff0c;上半年gpt横空出世&#xff0c;下半年各种翻车暴雷吃瓜吃到嘴软…

系统编程--VIM

这里写目录标题 vim三种工作模式进入文本模式的快捷键在命令模式下进行文本编辑 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 vim 三种工作模式 具体可见第二章对vim的详细介绍 …

第二节 linux操作系统安装与配置

一&#xff1a;Vmware虚拟机安装与使用   ①VMware是一个虚拟PC的软件&#xff0c;可以在现有的操作系统上虚拟出一个新的硬件环境&#xff0c;相当于模拟出一台新的PC &#xff0c;以此来实现在一台机器上真正同时运行多个独立的操作系统。   ②VMware主要特点&#xff1a…

ES6 Module详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…