Java:封装

文章目录

  • 一、概念
  • 二、实现
  • 三、测试
  • 四、总结

一、概念

在面向对象编程中, 封装从字面上来理解就是包装的意思,特点就是信息隐藏,防止该类的代码和数据被外部类的代码随机访问。

封装的优点:

  1. 良好的封装能够减少耦合。

  2. 统一接口。

  3. 可以保证数据的合法性。

  4. 隐藏信息,实现细节。


二、实现

  1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Student {private String name;private int age;
}

这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

  1. 对每个值属性提供对外的公共方法访问,用于对私有属性的访问,例如:
public class Student {private String name;private int age;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

this 关键字是为了解决 成员变量 和 局部变量 之间发生的同名的冲突。


三、测试

1、提供实体类

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

以上实例中public方法是外部类访问该类成员变量的入口。

通常情况下,这些方法被称为getter和setter方法。

因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

2、如何访问

// Test.java
public class Test {public static void main(String[] args) {// 1、创建对象Student student = new Student();// 2、赋值student.setName("张三");student.setAge(18);// 3、打印对象System.out.println("学生的姓名:" + student.getName() + "\n学生的年龄:" + student.getAge());}
}

运行结果:

学生的姓名:张三
学生的年龄:18

四、总结

大家看到这,可能会感觉为什么要用封装呢,我们使用普通调用的时候,输入任何值都是可以的,比
如:上述对象的年龄字段我不输入18,而是-18,这显然不合理,这有的同学就会想到,我加一层判断不就行了,但是你要想,如果你创建一千个对象,你难道要加一千层判断吗?但是封装的话,可以在类中的get/set方法,添加逻辑,如输入一个年龄的时候,可以在类中进行一些条件限制,比如要求输入年龄的范围,这样后面创建对象使用get/set方法都会走一遍你添加过的逻辑,这也是保证数据合法性的手段。

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

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

相关文章

搜索旋转数组

题目链接 搜索旋转数组 题目描述 注意点 数组已被旋转过很多次数组元素原先是按升序排列的若有多个相同元素,返回索引值最小的一个 解答思路 首先需要知道的是,本题数组中的旋转多次只是将头部的某些元素移动到尾部,所以不论怎么旋转&am…

uni-app怎样使用组件

在uni-app中使用组件,主要遵循以下几个步骤: 创建组件文件:在UniApp项目中创建一个新的组件,通常将组件文件保存在components文件夹下。如果components文件夹不存在,需要先创建它。然后在components文件夹下创建一个新…

Pycharm python解释器 unsupported python 3.1 解决

Pycharm 环境 unsupported python 3.1解决 1. 问题重现2. 原因分析3. 解决方法 1. 问题重现 之前使用Pycharm 2024.1.1的时候,环境配置的Python 3.11.9,现在改成使用Pycharm 2020.2.2,结果Python解释器显示“unsupported python 3.1”&#…

Java ORM框架FastMybatis踩坑

Java ORM框架FastmyBatis踩坑 问题:使用了FastmyBatis的saveOrUpdate方法,明明设置了主键的值且表中存在,但是依然执行insert操作。导致Duplicate PK。 原因:使用了其他第三方包的注解指定表的主键,没有按照FastmyBat…

低音炮内存卡格式化后无法播放音乐文件

试了多次 不支持ntfs不支持exfat 仅支持fat32 FAT32与exFAT的区别主要体现在来源、单个文件限制、适用情况以及兼容性方面。12 来源: FAT32是Windows平台的传统文件格式,首次在Windows 95第二版中引入,旨在取代FAT16,具有良好的…

自动驾驶中的逆透视变换(Inverse Perspective Mapping,IPM)详解

前言 IPM(Inverse Perspective Mapping,逆透视变换)图的历史可以追溯到计算机视觉和图像处理领域的发展。逆透视变换是一种用于消除图像中透视效应的技术,使得原本由于透视产生的形变得以纠正,进而更准确地描述和理解图像中的场景。比如在行车中的车道线检测,泊车中的常见…

陈志泊主编《数据库原理及应用教程第4版微课版》的实验题目参考答案实验2

实验目的 1.掌握在SQL Server中使用对象资源管理器和SQL命令创建数据库与修改数据库的方法。 2.掌握在SQL Server中使用对象资源管理器或者SQL命令创建数据表和修改数据表的方 法(以SQL命令为重点)。 实验设备 操作系统:Win11…

使用Source Insight 4.0

一、使用书签 二、添加文件 三、Search 3.1 替换所有变量 四、右键查询 4.1 查看被调用的地方

Linux上脚本备份数据库(升级版)

直接上代码: #!/bin/bash# 配置部分 mysql_user"root" mysql_host"localhost" mysql_port"3306" mysql_charset"utf8mb4" mysql_defaults_file"/home/mysql/mysql_back/.my.cnf"backup_base_dir"/mnt/sdd/…

GRPC使用之HelloWorld

使用grpc的好处是提供高效的序列化能力,能够跨语言进行调用。这一节我们来学习grpc的入门应用,整篇文章分成3部分: 接口定义,使用grpc的IDL,创建proto文件,编译/生成grpc文件服务端开发,处理客户端请求&am…

计算云服务1

前言 一直以来,计算资源都是整个企业业务系统发展所需的大动脉,没有计算资源,企业业务就无法正常运行。在云计算的时代里,计算服务也是云服务中的第一大类服务,计算资源的重要性由此可见。本章,我们将带领…

C++之do-while陈述

回圈是用来进行进行重复性的工作,典型的回圈会进行下列三项基本任务 1.控制变数初始设定2. 回圈结束条件测试3. 调整控制变数的值 关键字(keyword) do与while构成C 中回圈的一种,常用于后测式的回圈,意思是回圈会先进行第一轮,然后…

017-GeoGebra基础篇-微积分函数求解圆弧面积问题

基础篇慢慢的走进尾声,今天给大家带来一个小项目,是关于高中数学微积分部分的展示,这个项目主要包含了函数的介绍、函数与图形绘制的区别、区域函数图像的绘制、积分函数的应用、动态文本的调用、嵌套滑动条的应用等等,以及其他常…

基于Transformer神经网络的锂离子电池剩余使用寿命估计MATLAB实现【NASA电池数据集】

Transformer神经网络 基于Transformer神经网络的锂离子电池剩余使用寿命估计是一种先进的方法,它利用了Transformer模型在处理序列数据方面的优势。 Transformer能够有效地捕捉时间序列中的长程依赖关系和非线性模式,相比传统的基于循环神经网络&…

Github:git提交代码到github

创建 GitHub 仓库 a. 登录到您的 GitHub 账户。 b. 点击右上角的 "" 图标,选择 "New repository"。 c. 填写仓库名称(例如 "Mitemer")。 d. 添加项目描述(可选)。 e. 选择仓库为 &…

第一天(点亮led灯+led灯闪烁)——Arduino uno R3 学习之旅

​ 常识: 一般智能手机的额定工作电流大约为200mA Arduino Uno板上I/0(输入/输出)引脚最大输出电流为40 mA Uno板控制器总的输出电流为200 mA 点亮LED灯 发光二极管介绍 发光二极管(Light Emitting Diode,简称LED)是一种能够将电能转化为光能的固态的半导体器件…

【论文解读】LivePortrait:具有拼接和重定向控制的高效肖像动画

📜 文献卡 英文题目: LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control;作者: Jianzhu Guo; Dingyun Zhang; Xiaoqiang Liu; Zhizhou Zhong; Yuan Zhang; Pengfei Wan; Di ZhangDOI: 10.48550/arXiv.2407.03168摘要翻译: *旨在…

【MySQL】表的操作{创建/查看/修改/删除}

文章目录 1.创建表1.1comment:注释信息1.2存储引擎 2.查看表3.修改表3.1add添加列,对原数据无影响3.2drop删除列3.3modify修改列类型3.4change修改列名3.5rename [to]修改表名 4.删除表5.总结 1.创建表 CREATE TABLE table_name (field1 datatype,field…

AI行业的非零和博弈:解读Mustafa Suleyman的观点

引言 在人工智能(AI)领域,微软AI公司的CEO Mustafa Suleyman最近在阿斯彭思想节上的访谈引起了广泛关注。与CNBC记者Andrew Ross Sorkin的对话中,Suleyman不仅分享了他对OpenAI人事变动的看法,还深入探讨了AI行业的现…

FRP反向隧道代理打CFS三层

目录 攻击机 查看服务端frps.ini配置文件 开启服务端frps 蚁剑打目标机 上传客户端frp到目标机 ​frpc.ini文件配置成 客户端打开代理frpc vps显示成功客户端frpc打开 访问成功192.168.22.22的第二层内网主机 省去前面漏洞利用的rce过程,直接蚁剑开搞隧道…