day12_面向对象的三大特征之一(封装)

news2024/9/24 13:22:56

封装概述​​​​​​​

为什么需要封装?

  • 现实生活中,每一个个体与个体之间是有边界的,每一个团体与团体之间是有边界的,而同一个个体、团体内部的信息是互通的,只是对外有所隐瞒。例如:我们使用的电脑,内部有CPU、硬盘、键盘、鼠标等等,每一个部件通过某种连接方式一起工作,但是各个部件之间又是独立的。

面向对象编程语言是对客观世界的模拟,客观世界里每一个事物的内部信息都是隐藏在对象内部的,外界无法直接操作和修改,只能通过指定的方式进行访问和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”,而“高内聚,低耦合”的体现之一:

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;

  • 低耦合:仅对外暴露少量的方法用于使用

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。

如何实现封装呢?

通俗的讲,封装就是把该隐藏的隐藏起来,该暴露的暴露出来。那么暴露的程度如何控制呢?就是依赖访问控制修饰符,也称为权限修饰符来控制。访问控制修饰符来控制相应的可见边界,边界有如下:

  • 子类
  • 模块:Java9之后引入

在Java中 权限修饰符 如下所示:

外部类,我们只能使用public和缺省来修饰

成员变量、成员方法、构造器、成员内部类,我们可以使用任意的其中一种修饰符

注意事项:

protected修饰非静态成员,跨包时,只能在子类的非静态成员中访问,在静态成员中无论是否创建对象都不能访问

成员变量(属性)封装

好处:

  • 隐藏类的实现细节
  • 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性。
  • 便于修改,提高代码的可维护性。主要说的是隐藏的部分,在内部修改了,如果其对外可以的访问方式不变的话,外部根本感觉不到它的修改。例如:Java8->Java9,String从char[]转为byte[]内部实现,而对外的方法不变,我们使用者根本感觉不到它内部的修改。

成员变量也称为属性(property),我们对成员变量的封装也称之为对属性的封装。具体步骤如下:

1:使用 private 修饰成员变量,格式如下:

代码示例


public class Student {
    //使用 private 修饰成员变量
    private String name;
}

 2:提供 getXxx方法 / setXxx 方法,可以访问成员变量代码如下:

public class Student {
    //使用 private 修饰成员变量
    private String name;

    //获取成员变量值的getXxx方法
    public String getName() {
        return name;
    }

    //设置成员变量值的setXxx方法
    public void setName(String name) {
        this.name = name;
    }

}

我们观察上面的代码发现,this出现在其中,但它到底是什么意思了?this代码当前对象,哪个对象调用这个方法,this就代表哪个对象,在这里它主要用来区分同名的成员变量和局部变量。

测试代码

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        //设置属性的值
        student.setName("张三");
        //获取属性的值
        System.out.println("名字是: " + student.getName());
    }
}

如何解决局部变量与成员变量同名问题

  • 当局部变量与类变量(静态成员变量)同名时,在类变量前面加“类名.";
  • 当局部变量与实例变量(非静态成员变量)同名时,在实例变量前面加“this.”

当然this还有其他的作用,这个我们以后在说..

总结

把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。封装的思想体现在Java的各个方面,例如:

  • 属性私有化是对属性的封装
  • 方法是对独立功能的封装
  • 包是对类的封装
  • ....

我们可以根据实际需要来使用Java中的封装性

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

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

相关文章

【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 文章目录 🍔多表查询⭐多表关系🎈一对多&#x…

自动化运维工具-Ansible详解

目录 一、Ansible介绍 (一)简介 (二)特性 (三)优势 (四)基本架构 (五)任务执行模式 (六)ansible与其余配置管理软件的对比 二、…

【C++篇】STL标准模板库

友情链接:C/C系列系统学习目录 知识点内容正确性以C Primer(中文版第五版)、C Primer Plus(中文版第六版)为标准,同时参考其它各类书籍、优质文章等,总结归纳出个人认为较有逻辑的整体框架&…

SpringCloud Alibaba入门1之创建多模块工程

一、创建父项目 创建一个父Maven项目,项目命名为myshop,用于管理子模块。 创建项目后,删除src和增加pom设置 二、创建子module 右键父项目,新建module 此我们的子module就创建完成了。接下来如法炮制,创建另外几个子module&…

【Python 基础篇】Python 元组及元组常用函数

文章目录 导言一、什么是元组二、创建元组2.1 使用括号创建元组2.2 使用函数创建元组 三、访问元组元素四、元组常用函数4.1 len()4.2 count()4.3 index() 总结 导言 当我们需要存储一组不可变的数据时,Python中的元组(Tuple)就派上了用场。…

chatgpt赋能python:Python文件与目录

Python文件与目录 Python拥有强大的文件和目录操作功能,这使得它成为一个非常强大的编程语言之一。Python的文件和目录操作功能可以帮助你创建、读取和写入文件,访问和处理目录结构,以及对文件和目录进行各种操作。 在这篇文章中&#xff0…

jmeter连接数据mysql数据库

1. 数据库驱动下载 下载地址:https://dev.mysql.com/downloads/connector/j/5.1.html 将下载后的 mysql-connector-java-8.0.27.jar 包放到jmeter的lib目录下 2. 创建jdbc connnection configuration jdbc:mysql://43.224.3.131:3360/student?allowMultiQueriest…

【C++篇】C++与C小知识点区别

友情链接:C/C系列系统学习目录 知识点内容正确性以C Primer(中文版第五版)、C Primer Plus(中文版第六版)为标准,同时参考其它各类书籍、优质文章等,总结归纳出个人认为较有逻辑的整体框架&…

2023-01-06 LightDB单机安装.md

LightDB单机安装 LightDB官网:https://www.hs.net/lightdb 下载安装包:lightdb-x-13.8-22.3-7953-el7.x86_64.zip 前置准备 防火墙配置(选择一种操作) firewall防火墙 firewall-cmd --permanent --add-port5432/tcp firewall-cmd --permanent --add-port…

【Unity Shader】从入门到感慨(2)用C#画一个立方体

文章目录 一、构成一个立方需要多少个顶点?二、定义三角面的索引数组:三、定义UV坐标数组:四、最后构建Mesh:五、完整代码:一、构成一个立方需要多少个顶点? 这个问题是面试经常被问到的题。如上图,我们知道在几何中立方体有6个面,8个顶点。但在图形学中,顶点指的是模…

神经网络:卷积操作

当谈到计算机视觉中的网络模型结构时,卷积操作是其中一个关键的组成部分。卷积操作是一种基于局部区域的操作,它在计算机视觉中用于图像处理和特征提取。 卷积操作的原理如下: 给定一个输入图像和一个称为卷积核(或滤波器&#x…

HCIP网络笔记分享——IA回顾及OSPF协议

第一部分 HCIA回顾1、网络基础2、动态路由协议3、路由认证4、路由控制(AD metric ) 一、知识巩固二、场景模拟1、获取IP地址1.1 DHCP --- 动态主机配置协议1.1.1 DHCP客户端1.1.2 DHCP服务器1.1.3 DHCP客户端1.1.4 DHCP服务器 2、打开浏览器3、路由器进行…

QT 多语言 中英文切换

本文详细的介绍了利用Qt语言大师工具,实现Qt程序的多国家语言切换。例如新建界面、pro参数、更新翻译、QT预言家翻译语言、翻译中文、翻译英文、发布翻译、核心代码、h源代码、cpp源代码、演示效果等操作。 本文作者原创,转载请附上文章出处与本文链接…

chatgpt赋能python:Python文件怎么建立?

Python文件怎么建立? 对于有经验的Python开发人员,创建文件是一个基本的任务。在这篇文章中,我们将讨论如何创建Python文件,包括使用文本编辑器、命令行和集成开发环境(IDE)。 通过文本编辑器创建Python文…

【在线商城系统】数据来源-爬虫篇

系列文章目录 【在线商城系统】数据来源-爬虫篇 文章目录 系列文章目录前言1、目标2、系统设计3、系统功能3.1、数据建模3.2、数据处理层系统3.2.1、创建Springboot项目3.2.1.1、配置依赖3.2.1.2、Selenium辅助类3.2.1.3、商品分类、商品详情实体类 3.2.2、获取数据3.2.3、获取…

【C++篇】继承和派生

友情链接:C/C系列系统学习目录 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的…

不用手动改 package.json 的版本号

“为什么package.json 里的版本还是原来的,有没有更新?”,这个时候我意识到,我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号,只要在发布打tag的时候同步一下即可 node.js 部分,我们得有一个…

探索视频文本特征加速检索解决方案——倒排索引

前言 随着视频内容的不断增加,如何快速准确地检索到所需的视频成为了一个重要的问题。而视频文本特征加速检索解决方案——倒排索引,成为了解决这一问题的有效手段。该技术可以加速文本和视频片段特征匹配、相似度排序过程! 定义——何为“…

windows -- dos命令

文章目录 内部命令变量常用命令特殊命令符综合案例 外部命令 内部命令 操作系统的内部命令。 win r, 输入cmd 打开命令窗口; 如: dir,查看当前目录下的内容cd,切换目录copy, 拷贝echo,打印 变量 windo…

硬盘被写保护怎么解决

目录 问题描述方法1:使用diskpart清除只读属性方法2:树莓派镜像烧录软件 U盘格式化不了,怎么做呢? 问题描述 方法1:使用diskpart清除只读属性 我是I盘出现了问题,所以我在命令提示符输入: chk…