7.8 封装详解

news2024/11/24 5:03:38

7.8 封装详解

就是把东西装进箱子里,只留一个口,比如我们看电视的时候我们只用遥控器换一个台就行了,不需要知道电视里面是怎么构造的,电视机使用的厂家为了使用方便就把电视机内部的组件全部封装在了壳子里,只给我们暴露出一个开关和换台。

  • 该露的露,该藏得藏:
    • 我们程序设计要追求高内聚,低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,比如银行里面的总钱数是由银行人员操作的不需要每个人都去操作,而每个个人都只操作自己的账户即可;低耦合:仅暴露少量的方法给外部使用,比如都是去取钱,能取钱的都是银行的一些普通用户就可以,而这些人是不能去操作那些钱的,不能把银行的钱借给别人,只能操作自己卡上的钱,也就是说方法是有限的。
  • 封装(数据的隐藏)
    • 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这称为信息隐藏
  • 记住这句话就够了:属性私有,get/set

封装大多数是针对属性的,对于方法用的比较少

封装的核心就是私有,也就是关键字Private

get,set方法就是提供一些可以操作这个属性的方法,由于这些属性变得私有了,外部的人即使是new了这个对象,也不能去用这些属性。所以就需要提供一些public的get或者set方法。

get:就是获得这个数据或者属性

set:就是给这个属性设置值

这里不直接操作属性,而是通过一些外部可以调用的方法进行操作。

注意:

  1. 属性私有的时候一般都是用Private关键字进行修饰。

  2. 在IDEA中使用alt+insert可以自动生成get/set方法

    快捷键

  3. 属性私有的意义在于

    1. **提高程序的安全性,**可以对属性进行数据赋值合法性进行安全性检查,可以利用封装的set方法进行一些安全性的检查,也就是可以通过内部的封装让我们的程序变得更安全。可以避免有些人破坏程序系统
    2. 可以隐藏代码的实现细节,如示例中用户只能设置年龄,而里面的合法性判断实现用户是看不到的,作为一个调用者,根本不知道类里面是如何实现的。
    3. 可以统一接口
    4. 提高了系统的可维护性,良好的封装便于我们修改内部代码,提高程序的可维护性
  4. 也就是只用记住封装就是属性私有、get/set方法,我们可以在set方法中增加安全性判断。

  5. 一般情况下get/set很少用重载,大部分的重载都是在构造器中使用的

  6. 在平时看源码的时候,可以多看一些重载的方法,在Java中判断一个类的两个方法是否相同,主要就参考1.方法名,2.参数列表

封装实例

package com.baidu.www.oop.demo04;
public class Student {
    //属性私有,也就是加上一个private关键字
    //名字
    private String name;
    //学号
    private int id;
    //性别
    private char sex;
    //年龄
    private int age;
    //get,set方法就是提供一些可以操作这个属性的方法
    //get:就是获得这个数据或者属性
    public String getName(){
        return this.name;
    }
    //set:就是给这个属性设置值,而设置值的方法返回值可以为空
    public void setName(String name){
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }
    //属性私有的意义在于可以对属性进行数据赋值合法性进行安全性检查,可以利用封装的set方法进行一些安全性的检查
    public void setAge(int age) {
        if(age>120 || age <0){
            this.age=3;
        }else {
            this.age = age;
        }

    }
    //学习()

    //睡觉()
}

主程序实例

package com.baidu.www.oop;

import com.baidu.www.oop.demo04.Student;

public class Application {
    public static void main(String[] args) {
       Student s1 = new Student();
       String name = s1.getName();
       System.out.println(name);
        System.out.println(s1.getName());
       s1.setName("肆悟先生");
        System.out.println(name);
        System.out.println(s1.getName());
        s1.setAge(35);
        System.out.println(s1.getAge());
    }
}

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

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

相关文章

Web-WebApp Vue.js 目录结构

WebApp Vue.js 目录结构 目录解析 目录/文件 说明 build 最终发布的代码存放位置。config 配置目录&#xff0c;包括端口号等。我们初学可以使用默认的。node_modules npm 加载的项目依赖模块 src 这里是我们要开发的目录&#xff0c;基本上要做的事情都在这个目录里。里面包…

剪切、复制、粘贴事件

剪切、复制、粘贴事件 oncopy 事件在用户拷贝元素上的内容时触发。onbeforecut 事件在用户剪切文本&#xff0c;且文本还未删除时触发触发。oncut 事件在用户剪切元素的内容时触发。onbeforepaste 事件在用户向元素中粘贴文本之前触发。onpaste 事件在用户向元素中粘贴文本时触…

(2023Arxiv)Meta-Transformer: A Unified Framework for Multimodal Learning

论文链接&#xff1a;https://arxiv.org/abs/2307.10802 代码链接&#xff1a;https://github.com/invictus717/MetaTransformer 项目主页&#xff1a;https://kxgong.github.io/meta_transformer/ 【注】&#xff1a;根据实验结果来看&#xff0c;每次输入一种数据源进行处…

【位操作符的几种题型】

位操作符的几种题型 目录 题型一&#xff1a;寻找“单身狗”。 题型二&#xff1a;计算一个数在二进制中1的个数 题型三&#xff1a;不允许创建临时变量&#xff0c;交换两个整数的内容 题型一&#xff1a;寻找“单身狗”。 1.1题目解析 在一个整型数组中&#xff0c;只有…

Spring 使用注解储存对象

文章目录 前言存储 Bean 对象五大注解五大注解示例配置包扫描路径读取bean的示例 方法注解 Bean Bean 命名规则重命名 Bean 前言 通过在 spring-config 中添加bean的注册内容&#xff0c;我们已经可以实现基本的Spring读取和存储对象的操作了&#xff0c;但在操作中我们发现读…

MySQL DAL单表练习一(学生表)

目录 步骤&#xff1a; 1、创建学生表 2、插入数据 1&#xff09;查询表中所有学生的信息 2&#xff09;查询表中所有学生的姓名和英语成绩 3&#xff09; 过滤表中的重复数据 4&#xff09; 统计每个学生的总分 5&#xff09; 所有学生总分上加上10 6&#xff09; 使…

Java实现COM串口通信

前言 本文主要是实现监听电脑的 com3串口数据 Honeywell的一个扫描识别的器插入 Window笔记本的USB接口。 我的电脑是 Window11的&#xff0c;不需要安装驱动&#xff0c;它自己就有一个 COM3的串口 我把这玩意儿插在我的我电脑的USB接口过后&#xff0c;在电脑的 设备管理器就…

python条件分支和循环语句

python中没有{}的写法&#xff0c;一般时通过缩进的方式来确定分支和循环需要执行的代码块。 if 需要判断的条件表达式:条件成立时的动作 elif 需要判断的条件表达式:条件成立时的动作 else:动作for 变量 in 迭代对象:动作 示例&#xff1a; while 退出条件:动作

【MySql】RR有幻读问题吗?MVCC能否解决幻读?

文章目录 前言RR 隔离级别MVCCRR MVCC 有幻读问题吗&#xff1f;幻读问题演示如何彻底解决幻读&#xff1f;小结 前言 幻读是 MySQL 中一个非常普遍&#xff0c;且面试中经常被问到的问题&#xff0c;如果你还搞不懂什么是幻读&#xff1f;什么是 MVCC&#xff1f;以及 MySQL…

JRebel激活服务搭建彻底解决第三方服务失效问题

下载代理激活服务 下载地址 启动服务 激活插件 随机序列号生成地址&#xff1a;GUID online erstellen 激活地址为&#xff1a;http://127.0.0.1:8888/自己生成的GUID 完成激活 参考资料&#xff1a;2023idea中热部署插件JRebel的激活方式

最长上升序列II

最长上升序列II 有N个数放在一个圆周上&#xff0c;可以从任意一个位置开始按照顺时针方向访问数据一圈&#xff0c;沿途可以挑选一些数&#xff0c;要求这些数是上升的&#xff08;一个比一个大&#xff09;。问最多能选多少个数&#xff1f; 输入格式 第一行&#xff1a;1个…

Kafka与Zookeeper版本对应关系

文章目录 了解版本对应Kafka安装包Kafka源码包 了解 比如&#xff1a; kafka_2.11-1.1.1.jar包 其中2.11表示的是Scala的版本&#xff0c;因为Kafka服务器端代码完全由Scala语音编写。”-“后面的1.1.1表示的kafka的版本信息。遵循一个基本原则&#xff0c;Kafka客户端版本和服…

TP、TN、FP、FN的理解

TP、TN、FP、FN的理解 理解英文意思&#xff1a; 在第2个单词的基础上理解第1个单词&#xff08;即第2个单词是前提条件&#xff09; TP&#xff1a;True Positive 判定为真的&#xff08;positive&#xff09;&#xff0c;且判定对了&#xff08;true&#xff09; TN&…

解决selenium的“can‘t access dead object”错误

目录 问题描述 原因 解决方法 示例代码 资料获取方法 问题描述 在python执行过程中&#xff0c;提示selenium.common.exceptions.WebDriverException: Message: TypeError: cant access dead object 原因 原因是代码中用到了frame,获取元素前需要切换到frame才能定位到…

【TypeScript】中关于 { 声明合并 } 的使用及注意事项

概念&#xff1a; 在TS中&#xff0c;如果定义了多个相同命名的函数&#xff0c;接口或者class 类&#xff0c;那么它们会自动合并成一个类型 函数的合并&#xff1a; 前面章节讲解的函数重载就是使用了定义多个函数的类型进行合并&#xff1a; function reverse(x: number):…

Git介绍及常用命令详解

一、Git的概述 Git是一个分布式版本控制工具&#xff0c;通常用来对软件开发过程中的源代码文件进行管理。 Git 会跟踪我们对文件所做的更改&#xff0c;因此我们可以记录已完成的工作&#xff0c;并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易&…

渐进式云渲染和模块式云渲染:二者的区别与选择

云渲染是一种利用云计算技术&#xff0c;将本地的渲染任务分配到远程的服务器上进行高效、快速、低成本的渲染的服务。云渲染可以帮助用户节省时间、资金和硬件资源&#xff0c;提高工作效率和质量。但是&#xff0c;在使用云渲染时&#xff0c;用户需要面对一个重要的选择&…

unable to write symref for HEAD: Permission denied

今天从gitee上面克隆项目到本地时报错如下 warning: unable to unlink ‘D:/IDEAcode/ruiji1.0/.git/HEAD.lock’: Invalid argument error: unable to write symref for HEAD: Permission denied 解决方法&#xff1a;将要存放项目的文件夹权限修改为完全控制 原先权限&…

Unity游戏源码分享-乐节奏休闲游戏源码 guitar hero 支持mobile

Unity游戏源码分享-乐节奏休闲游戏源码 guitar hero 支持mobile 完整版下载地址&#xff1a;https://download.csdn.net/download/Highning0007/88198766

tcl学习之路(四)(vivado设计分析)

1.FPGA芯片架构中的对象 在打开elaborated/synthesied/implemented的情况下&#xff0c;可使用如下命令获取期望的SLICE。SLICE分为SLICEL和SLICEM&#xff0c;由LUT、FF、MUX、CARRY组成。 set all_slice [get_sites SLICE*] set col_slice [get_sites SLICEX0Y*] set all_sl…