【JavaSE成神之路】聊聊封装这件事

news2024/12/24 8:12:38

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是Java的封装。

1. 什么是封装

Java的封装是指,在一个类中把一些重要的信息隐藏起来,使得外部不能直接访问。

Java的封装是一种面向对象编程技术,它把类中的属性和方法封装在一起,使外部只能通过特定的方法访问类中的属性和方法,这样可以让外部不能直接修改类中的属性和方法,从而有效控制类的内部状态。

例如,定义一个Person类,它有两个属性name和age,我们可以通过下面的代码来封装它:

public class Person{
    private String name;
    private int age;
    
    public String getName(){
        return name;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    public int getAge(){
        return age;
    }
    
    public void setAge(int age){
        this.age = age;
    }
}

在上面的代码中,将name和age属性封装在Person类中,并且为它们提供了getter和setter方法,这样外部就只能通过这些方法来获取和修改类中的属性,从而有效地控制了类的内部状态。

并且,我们给name和age属性添加了private修饰符,这样外部就不能直接操作了。你要操作name和age属性,就得去调用对应的public方法。

再举一个例子,就好比ATM机,里面的钞票属于重要信息,是私有(private)的,你无法直接看到里面有多少钱,存放在什么位置?

但是,ATM机有插卡口,出钞口,以及显示屏,这些部件就是public的方法,你通过插卡和输入密码就可以进行存取款操作。

这就是封装。

2. 如何用Java代码实现封装

就是上面的例子,分两步。

01:将属性设置为private,代表私有的。

02:设置public的get/set方法,去操作私有属性。

有快捷键可以使用,快速生成get/set方法。

在idea中:

  1. 选中要生成getter和setter方法的属性,右键选择Generate;

  2. 在Generate菜单中选择Getter和Setter;

  3. 勾选要生成的属性,点击OK即可生成getter和setter方法。

在eclipse中:

  1. 选中要生成getter和setter方法的属性,右键选择Source;

  2. 在Source菜单中选择Generate Getters and Setters;

  3. 勾选要生成的属性,点击OK即可生成getter和setter方法。

3.上一节课后作业

创建一个汽车类Car,拥有品牌brand和颜色color两个属性。分别用带参构造器和无参构造器来实例化Car类,并编写toString方法。再写一个测试类,在测试类的main方法中进行测试。

参考答案:

public class Car {
    private String brand;
    private String color;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    //无参构造器
    public Car(){
        this.brand="";
        this.color="";
    }

    //带参构造器
    public Car(String brand,String color){
        this.brand=brand;
        this.color=color;
    }

    //toString方法
    public String toString(){
        return "Car[brand="+brand+",color="+color+"]";
    }

}

测试类:

public class CarTest {
    public static void main(String[] args) {
        //使用无参构造器实例化Car
        Car car1 = new Car();
        car1.setBrand("Bmw");
        car1.setColor("White");
        System.out.println(car1.toString()); //输出:Car[brand=Bmw,color=White]

        //使用带参构造器实例化Car
        Car car2 = new Car("Benz","Black");
        System.out.println(car2.toString()); //输出:Car[brand=Benz,color=Black]
    }
}

4.课后作业

要求体现封装思想:

某ATM机有一个储蓄账户,请编写一个Java类Account,要求:

(1)定义成员变量:int balance,表示账户余额;

(2)定义构造方法,初始化账户余额;

(3)定义存钱方法void deposit(int amount),入参为存入的金额,账户余额增加amount;

(4)定义取钱方法void withdraw(int amount),入参为取出的金额,账户余额减少amount,如果余额不足,则提示“余额不足”;

(5)定义查询方法int getBalance(),返回账户余额;

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

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

相关文章

Java --- JUC之volatile

目录 一、volatile两大特点 二、volatile的内存语义 三、volatile内存屏障 四、volatile四大屏障 五、volatile的特性 六、volatile使用场景 一、volatile两大特点 1、可见性 2、有序性 二、volatile的内存语义 1、当写一个volatile变量时,JMM会把该线程对…

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针 第一节 C 语言基础以及基本数据类型 第二节 C 语言运算符 第三节 C 语言控制语句 第四节 C 语言自定义函数 第五节 C 语言修饰变量的关键字 第六节 C 语言构造数据类型–数组 第七节 C 语…

创建型模式

创建型模式 创建型模式对类的实例化过程进行了抽象,能够将软件中对象的创建和使用分离,使整个系统的设计更加符合单一职责原则。 什么是对象的创建与对象的使用分离? 一个女生想吃苹果,怎么办? 对象的创建和对象的使用…

TC275——04Blinky-LED

项目工程框架 项目驱动文件这个见过,三个main文件真的是开了眼,一个main代表一个核吗? 按照以往对实现LED闪烁的流程,一般是先配置时钟、再配置IO、延时,实现反转效果。 Blinky_LED.c 在驱动文件里: /*…

数据分析 -Hive学习 Day5

HIVE 核心技能之窗口函数 大家好呀,这节课我们学习 Hive 核心技能中最难的部分——窗口函数。窗口函数我们之前在学 MySQL 的时候有学过一些,但是只学了三个排序的窗口函数。这节课我们会学习更多的窗口函数,包括累计计算、分区排序、切片排…

nvm中node包管理器在windows中的使用

你要使用的 1/nuvm 只能在Linux 和 OS X 2/推荐使用nvm-windows,git上,我认为还可以就使用 操作 1/下载的git地址nvm-windows 2/好像要清除掉所有node,是个注意点 3/安装 4/路径上不允许存在空格,否则后面会各种报错 5…

读书笔记《硬件十万个为什么——开发流程篇》

大家好,这里是大话硬件。 今天想给大家分享上周末在家写的读书笔记,内容来源于重读《硬件十万个为什么——开发流程篇》这本书的一些启发和总结。 1. 为什么我要重读这本书籍? 这本书收到快递的时间是2022.8.26,拆开快递的那个晚上大约花了2个小时从头到尾快速浏览了一次…

(创建失败)小米万兆路由器里的Docker安装Redis7.0

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Redis7.0。 创建失败,有时间时确认是否可以解决。 Server cant set maximum open files to 10032 because of OS error: Operation not permitted. Current m…

【STM32 Cortex-M4核中断实验】

STM32 Cortex-M4核中断实验实验要求MX相关设置LED设置按键设置光电开关,火焰传感器,人体红外设置UART4设置代码编写结果测试实验要求 使用M4核开发 PF7/PF8/PF9/PF5/PF12/PE15检测中断 要求1:当中断到来时,LED灯状态取反 要求2&a…

EpilepsyGAN:具有隐私保护的合成癫痫脑活动-2021(同26)

EpilepsyGAN: Synthetic Epileptic Brain Activities with Privacy Preservation Abstract 癫痫是一种慢性神经系统疾病,影响全世界6500多万人,表现为反复发作的无端癫痫发作。癫痫发作的不可预测性不仅会降低患者的生活质量,而且还可能危及…

【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍

唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常! 少年不曾迷茫,展翅飞往神域,坚定初心,踏实行动。 新的一年,收下少年的祝福,一起踏上新道路。 💪(ง •_•)…

Spring Boot 日志文件

1.日志有什么用? ⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?答案是否定的,写程序不是买彩票,不能完全靠猜,…

Blender 非线性编辑器

文章目录非线性编辑器介绍动画摄影表/动作编辑器与非线性编辑器NAL非线性编辑器基本操作复制动画片段混合动画片段动画片段N键菜单活动片段栏回放剪辑栏非线性编辑器介绍 1 非线性编辑器是动画制作的一部分,类似于PR的轨道,可以合并多个不同的动画动作 …

【回答问题】ChatGPT上线了!推荐30个以上比较好的构建知识图谱源码

在此列出30个比较好的构建知识图谱的源码: Neo4j AgensGraph JanusGraph AnzoGraph Cayley GraphDB ArangoDB FlockDB OrientDB Redis Graph Virtuoso TigerGraph HyperGraphDB Titan Stardog GraphQL GRAKN.AI AllegroGraph Blazegraph Google Cloud Bigtable Apa…

10四个基本子空间

四个基本子空间 四个基本空间介绍 对于一个 m*n 矩阵 A 来说,以下四个基本空间是其基础。 2.1 四个基本空间的维数与基 还是研究 m*n 的矩阵 A,其四个子空间的基本性质如下: (1)列空间 之前介绍过列空间的基,设矩…

Go语言 值传递 引用传递 修改集合中的值

分类看一下Go的值传递和引用传递: 值传递:将值传递给函数 /* 引入单测包 */ import ("testing" )func TestSwap(t *testing.T) {x : 100y : 200swap(x, y)println("x:", x)println("y:", y) }/* 定义相互交换值的函数 *…

自己编译docker镜像

有时候官方现在的docker镜像并不能很好地符合自己的需求,我们需要自己定制。以下我主要是在官方mariadb:latest镜像的基础上,做一些定制化的操作如修改容器的编码格式。 /root/.pip目录下有两个文件: Dockerfile的文件内容如下:…

性能优化系列之你是否清楚浏览器的渲染过程?

文章の目录1、浏览器解析 HTML,生成 DOM Tree(Parse HTML)。2、浏览器解析 CSS,生成 CSSOM(CSS Object Model) Tree。3、JavaScript 会通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree&#x…

Docker安装Kibana整合Elasticsearch[包含账号密码设置]

文章目录一:拉取Es和Kibana镜像二:创建Es挂载目录2.1:挂载相关配置2.2:开放文件权限,否则后面运行容器会报错三:运行Es容器3.1: 运行参数说明3.2: 运行容器命令3.3: 开放防火墙四:运行Kibana容器…

十四、Kubernetes中pod配置详解、实例

1、概述 在kubernetes中基本所有资源的一级属性都是一样的&#xff0c;主要包含5部分&#xff1a; apiVersion <string> 版本&#xff0c;由kubernetes内部定义&#xff0c;版本号必须可以用 kubectl api-versions 查询到 kind <string> 类型&#xff0c;由kuber…