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;浙大链…

计量校准方案分享No.13——盐雾试验箱校准方案

测量单元:盐雾试验箱,工作室容积:0~1 一 依据文件 CNAS CL01-G002-2021 《测量结果的计量溯源性要求》现行有效 RB/T 034-2020 《测量设备校准周期的确定和调整方法指南》现行有效 CNAS TRL-004-2017 《 CNAS技术报告 测量设备校准周期的确定和调整方法指南》现行有效 JJF…

Ubuntu使用root用户远程登录

修改配置文件 在Ubuntu上&#xff0c;可以通过SSH&#xff08;Secure Shell&#xff09;来进行远程登录。默认情况下&#xff0c;Ubuntu的root用户是被禁止直接远程登录的&#xff0c;这样可以提高系统安全性。但如果确实需要使用root用户进行远程登录&#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…

HarmonyOS UI框架简介

HarmonyOS UI框架介绍 HarmonyOSUI框架是一个用于构建跨设备应用的开发框架&#xff0c;它属于HarmonyOS系统架构的上层框架。该框架通过提供一系列的开发模型、声明式UI范式、系统API等&#xff0c;帮助开发者更高效地构建用户界面。 在HarmonyOSUI框架中&#xff0c;开发语…

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

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

.net8时代,微软.net开发策略,F#不就是VB语言吗?

看了一下F#代码几乎和VB差不多&#xff0c;重复造轮子微软却玩的很开心。 可是真正的VB6,vb.net却抛弃了 .网络管理语言策略。NET微软学习https://learn.microsoft.com/en-us/dotnet/fundamentals/languages 微软提供三种语言。网络平台-C#,F#和视觉基础.在本文中,您将了解我…

计算机网络的接口

计算机网络接口是计算机与网络通信设备之间进行通信的重要部分&#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用于递…

java基础-回忆性记录3

运算符 算数运算符 运算符对常量或者变量进行操作的符号。 运算符吧常量或者变量连接起来符合java语法的式子可以称为表达式。 不同运算符连接表达式体现是不同类型。 符号作用说明加-减*乘/除%取余获取的是两个数据做除法的余数 注意&#xff1a; /和%的区别&#xff1a…

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

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

Linux mdu命令教程:如何有效地使用mdu命令(附实例教程和注意事项)

Linux mdu命令介绍 mdu命令是Linux系统中的一个命令&#xff0c;全称为My Disk Usage&#xff0c;它用于显示目录或文件所占用的磁盘空间。 Linux mdu命令适用的Linux版本 mdu命令在大多数Linux发行版中都可以使用&#xff0c;包括但不限于Ubuntu, Debian, Fedora, CentOS等…

【PHP】获取 URL 中域名后的路径

目录 1.指定的url 2.当前请求的url 1.指定的url 如果您想从指定的 URL 中获取域名后的路径&#xff0c;可以使用 PHP 的 parse_url() 函数。以下是一个示例&#xff0c;展示了如何从指定的 URL 中获取域名后的路径&#xff1a; <?php$url https://example.com/path/to/r…