Java零基础入门-封装

一、概述

        谈起面向对面编程,我们都知道有三大特征【封装、继承、多态】,跟随我一起学习的小伙伴都知道,对于三大特征的后两种,我们在前两期已经讲过了,至于我为啥没有按照特征顺序来教学,是因为我常不按规律出牌啊,因为对于前者而言,后者更关键,要想把java基础学好,面向对象编程,这三种特性是必经之路。

        而今天我就要把该三特性之一的封装也给大家讲掉,这样我们该三大特性就讲全啦。

好的,废话不多说,教学这就开讲。

二、本期教学目标

  • 封装概念
  • 封装优缺点
  • 封装有何作用
  • 实现封装的步骤
  • 示例

三、正文

1️⃣概念

        问大家个问题,何为封装(Encapsulation)?在程序里封装指的是一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。用通俗的话来讲就是把一个东西,关到一个密闭的房间里(没有任何出口,全密闭除了门),只留个门供外界通行。

        如下,我给大家画个示意图,简单意思一下。

        封装就可以被认为是一道屏障,为了防止该类的代码和数据被外界的方法或者类所随机访问,想要访问该类的方法或属性,就必须通过严格的接口控制。

        其实封装,最主要的功能就是降低耦合,我们只需要修改自己实现的代码,而不用去修改那些调用的封装好的方法,这不仅减低了耦合而且也更易于维护,比如代码报错,我们可以压根不需要去定位封装方法是否有问题,而只需要去检查自己写的那部分是否有问题,毕竟封装的方法都是需要经过书写testcase进行一定测试的,否则怎么能够供所有人使用呢?就比如工具类。 

2️⃣优缺点

        说起封装,肯定会有它的优缺点,封装的缺点嘛?不利于开发测试,debug,没办法深入读每一个类,不利于调试。

        说起优点。就相对比较多了,比如降低代码的耦合度,隐藏代码的实现细节,内部类可自由修改,也大大提升了其可运维性。

3️⃣作用

        说起封装,我们可以来谈谈,封装可以做啥,为何这么推崇注重程序开发一定要有运用封装的思想,其实啊,这是有目的的,具体如下:

  1. 有效减少代码耦合度。
  2. 为了隐藏代码的实现细节(毕竟对于一个方法,我只想调用方法达到目的,而没必要在该调用逻辑里也一并实现它)。
  3. 类内部结构可自由修改。
  4. 提升系统的可维护性。

4️⃣实现步骤

        在程序设置过程中,讲究“高内聚,低耦合”,一切都按此目的而为。而封装正式利于此目的的发展。如下我举两个例子,通过封装的思想来实现表述其的优点。

        通常我们会禁止直接访问一个对象,而是通过操作接口的形式来访问来做到信息隐藏。比如设置属性私有,具体如何设置请看如下:

5️⃣示例

@Data
public class Animal {//父类

    private String type;
    private String name;
    private String color;

    public void eat() {
        System.out.println("我是父类,吃东西!");
    }
}

        那我们要调用Animal类,我们就应该创建一个Animal对象,通过对象点(animal.xxx)来获取其属性或者方法,具体演示如下:

         总而言之,我们就可以看到,在这段代码中,将 type、name、color三属性设置为私有的(private),也就只能Animal本类才能访问,其他类都访问不了,如此就对信息实现了很好的隐藏作用;然后外界想访问其Animal类的属性,也就得提供给调用者赋值取值的方法,用于对私有属性的访问。如上我是直接使用了@Data注解(自动添加构造方法和get/set等方法),如下我将手动给大家演示一下,手动创建get set方法(其实生成get set方法添加也是有快捷键,alt+insert 组合键,然后选择Getter and Setter即可):

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

        如上对set方法采用 this 关键字,其实是为了解决实例变量(private String type)和局部变量(setType(String type)中的type变量)之间发生的同名冲突。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL8.3.0 主从复制方案(master/slave)

一 、什么是MySQL主从 MySQL主从(Master-Slave)复制是一种数据复制机制,用于将一个MySQL数据库服务器(主服务器)的数据复制到其他一个或多个MySQL数据库服务器(从服务器)。这种复制机制可以提供…

Android Studio中查看和修改project的编译jdk版本

android studio中查看和修改project的编译jdk版本操作如下: File->settings->Build,Execution,deployment->Build Tools->Gradles 进入Gradles页面可以查看并修改project的编译jdk版本,如图所示

基于 Lambda 实现 Claude3 的流式响应

在如今的大语言模型推理输出场景中,流式响应基本已成为必备的功能之一。一方面符合大语言模型生成方式的本质,另一方面当模型推理效率不是很高时,流式响应比起全部 generate 后再输出、能大幅缩短从开始请求到输出第一个 Token 的时间&#x…

访问网站显示不安全是什么原因?怎么解决?

访问网站时显示“不安全”,主要原因以及解决办法: 1.没用HTTPS加密:网站还在用老的HTTP协议,数据传输没加密,容易被人偷看或篡改。解决办法是网站管理员启用HTTPS,也就是给网站装个“SSL证书”。这个是最常…

5.6 mybatis之RowBounds分页用法

文章目录 mybatis 中,使用 RowBounds 进行分页,非常方便,不需要在 sql 语句中写 limit,即可完成分页功能。但是由于它是在 sql 查询出所有结果的基础上截取数据的,所以在数据量大的sql中并不适用,它更适合在…

深度学习学习日记4.8(下午)

1.softmax 函数的得出的结果是样本被预测到每个类别的概率,所有类别的概率相加总和等于1。使用 softmax 进行数据归一化,将数字转换成概率。 2.熵,不确定性,越低越好 3.KL 散度交叉熵-信息熵 预测越准,交叉熵越小&am…

【大数据】大数据概论与Hadoop

目录 1.大数据概述 1.1.大数据的概念 1.2.大数据的应用场景 1.3.大数据的关键技术 1.4.大数据的计算模式 1.5.大数据和云计算的关系 1.6.物联网 2.Hadoop 2.1.核心架构 2.2.版本演进 2.3.生态圈的全量结构 1.大数据概述 1.1.大数据的概念 大数据即字面意思&#x…

什么是人工智能?人工智能、机器学习、深度学习三者之间有什么关系吗?

深度学习是机器学习的一个分支。深度学习是机器学习的一部分,与机器学习的其他分支学科,以及统计学、人工智能等学科都有着紧密的联系。深度学习、机器学习、人工智能、统计学之间的关系如图1-4所示。 图1-4 深度学习、机器学习、人工智能、统计学之间的…

CNAS认可和CMA认可对比辨析

性质对比 CNAS(China National Accreditation Service for Conformity Assessment,中国合格评定国家认可委员会)。该委员会是国家授权的单位,是专门来做认可和监督工作的。认可的对象是认证机构、检验机构和实验室等。确认其是否有…

php站长在线工具箱源码优化版

环境要求 PHP > 7.4MySQL > 5.6fileinfo扩展使用Redis缓存需安装Redis扩展 源码下载地址:php站长在线工具箱源码优化版.zip

Android图形显示架构概览

图形显示系统作为Android系统核心的子系统,掌握它对于理解Android系统很有帮助,下面从整体上简单介绍图形显示系统的架构,如下图所示。 这个框架只包含了用户空间的图形组件,不涉及底层的显示驱动。框架主要包括以下4个图形组件。…

SRIO学习(3)使用SRIO IP核进行设计

文章目录 前言一、设计框图二、模块介绍三、上板验证 前言 本文将通过使用SRIO IP核实现数据通信,重点在于打通数据链路,具体的协议内容设计并非重点,打通了链路大家自己根据设计需求来即可。 一、设计框图 看了前面高速接口的一些设计&am…

【uniapp】开发微信小程序 — 注意事项

底部导航栏 (tabBar) 图标的正确做法: 1、图片的标准尺寸为 81px * 81px,该尺寸在官方的文档中有明确的说明,可以参考微信小程序全局配置文档中对 iconPath 属性的说明。 2、为了保持良好的间距,图片的内容区域设置 60px* 比较好&…

docker最简单教程(使用dockerfile构建环境)

一 手里有的东西 安装好的dockerdockerfile 二 操作 只需要在你的dockerfile文件下执行命令 docker build -t"xianhu/centos:gitdir" . 将用户名、操作系统和tag进行修改就可以了,这就相当于在你本地安装了一个docker环境,然后执行 docker…

【c 语言】结构体的概念

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

JAVAEE——网络初始

文章目录 网络发展史独立模式网络模式局域网LAN路由器的诞生 网络通信的基础IP地址端口号 认识协议OSI七层模型TCP/IP五层模型 网络发展史 独立模式 在原始的年代中电脑间想要通信需要两台电脑连接一根网线,但是一台电脑基本上只有一个接口。因此想要链接更多的电…

函数重载和引用【C++】

文章目录 函数重载什么是函数重载?函数重载的作用使用函数重载的注意点为什么C可以函数重载,C语言不行? 引用什么是引用?引用的语法引用的特点引用的使用场景引用的底层实现传参时传引用和传值的效率引用和指针的区别 函数重载 什…

全国火情预报卫星遥感应用方案

一、引言 火情预报应急卫星遥感解决方案是一种利用卫星遥感技术进行火灾预警和应急响应的方法。该方案通过实时监测和分析森林、草原等地区的火情信息,为火灾预警和应急响应提供科学依据,有效减少火灾造成的损失。本技术文档将介绍火情预报应急卫…

Android-NDK的linux交叉编译环境

NDK工具包下载 NDK 下载 | Android NDK | Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例,下载后将压缩包解压至/usr目录下 CMakeLists编译选项设置 编译平台变量判断条件中增加一下android条件…

7款公司电脑监控软件

7款公司电脑监控软件 研究证明,人们在家办公的效率比在办公室办公的效率低一半,其中原因是缺少监督,即便在公司办公,还存在员工偷闲的时刻,比如聊天、浏览无关网站、看剧、炒股等,企业想提高员工的工作效率…