java基础之封装

news/2025/2/26 20:03:05/文章来源:https://www.cnblogs.com/fanxn/p/18730201

面向对象的三个重点:封装、继承和多态

概念:把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。
比如,对电视机的操作就是典型的封装

理解和好处:
1.隐藏实现细节:调用写好的方法就行
2.可以对数据进行验证,保证安全性

封装的实现:
1.将属性进行私有化(不能直接修改属性)
2.提供一个公共的(public)set用于对属性判断并赋值
public void setxxx(类型 参数名){//xxx表示某个属性
//加入验证的业务逻辑
属性=参数名;
}
3.提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getxxx(){//权限判断,xxx某个属性的值
return xxx;
}

练习:
总结:
1.两个快捷键的使用
2.用set和get方法对private的属性进行操作
可以增加权限的判断,增加业务逻辑

package com.stu;public class encapsulation01 {/*那么在iava中如何实现这种类似的控制呢?请大家看一个小程序(Encapsulation01.java),不能随便査看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认年龄,必须在 1-120,年龄, 工资不能直接査看, name的长度在 2-0字符。之间*/public static void main(String[] args) {Person person = new Person();person.setName("jack00000");person.setAge(300);person.setSalary(30000);System.out.println(person.info());//这里是输出返回的字符串}
}class Person{public String name;//名字公开private int age;//age私有化private double salary;//..//自己手写get和set方法太慢,我们可以使用快捷键//alt+insert//运行快捷键:alt+u+upublic void setName(String name){//限制:名字在2~6个字符//相当于增加了业务逻辑if(name.length()>=2&&name.length()<=6){this.name = name;}else {System.out.println("名字的长度不对,需要默认名字");this.name="无名人";}}public String getName(){return name;}public int getAge() {return age;}public void setAge(int age) {//限制:年龄在1~120if(age>=1&&age<=120){this.age = age;}else {System.out.println("你设置的年龄不对,年龄需要在1~120,给默认年龄18");this.age=18;}}public double getSalary() {//增加对当前对象的权限判断return salary;}public void setSalary(double salary) {this.salary = salary;}//在返回字符串这里,我一开始有点懵了public String info(){return "信息为  name=" + name + " age=" + age + " salary=" + salary;}
}

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

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

相关文章

leetcode hot 13

解题思路:本题思路主要是前缀和思想,涉及到子集和问题,前缀和思想有效,两个前缀和的差就等于对应一个子集和。本题可以用哈希表的方式记录每个前缀和的值,核心依靠k = pre[j]-pre[i]转化成pre[j]-k=pre[i],计算pre[i]这个值出现的个数加到res中,最后返回。 class Solutio…

redis - [10] 持久化

redis是一个内存数据库,断电即失。需要持久化到磁盘中。 001 || RDB 在执行的时间间隔内将内存中的数据集快照写入到磁盘(快照),恢复时是将快照文件直接读到内存中。 Redis会单独创建(fork)一个子进程进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了…

小红书独立开发大赛:让你的宝藏应用被更多人看到

无论你是业余在做一款 passion project 的 builder,还是试图 bootstrapping 自己造血的小团队。小红书发起的首届独立开发大赛都值得你关注。最近越来越多的社区开发者说,他们会选择在小红书冷启动自己的项目,因为这里能获取到友善的初期反馈和精准的早期用户。这些反馈和用…

博客作业:软件缺陷分析与二次开发实践(图书管理系统)

(1)来源 本次分析的代码来源于网络上的一个C++书籍购买系统项目。该项目模拟了不同用户类型(如会员、贵宾、学生等)购买书籍时的折扣计算和购买记录保存功能。原始代码虽能运行,但存在一些设计缺陷和潜在问题。 (2)运行环境+运行结果截图 运行环境: 环境:Windows 11 +…

博客添加看板娘

{% note info flat %} 本文转载自偷掉月亮的阿硕,本博客看板娘基于该教程搭建。 文章作者: 偷掉月亮的阿硕 文章链接: https://moonshuo.cn/posts/16544.html {% endnote %}

预祝2025省选嗨翻天

预祝2025省选嗨翻天\(T1\) A. 单峰序列 \(8pts\)部分分\(8pts\) :枚举每个数在单峰序列的左边还是右边,求次数做法同 luogu P3531 [POI 2012] LIT-Letters 。点击查看代码 int a[500010],b[500010],c[500010],ans[500010],id; vector<int>l,r; struct BIT {int c[50001…

配置github图床+picgo-core上传+jsdelivr

GitHub图床GitHub图床部分参考自教程Github图床+PicGo+JsDelivr+imgbot+automerge-action.imgbot图片压缩图片压缩部分参考自教程Github图床+PicGo+JsDelivr+imgbot+automerge-action.automerge-action最新版地址https://github.com/marketplace/actions/merge-pull-requests-a…

让博客在关键日子弹窗-变灰-放烟花

本文大体上参考自[1],新增了放烟花功能。前置教程 参见[1:1]。 {% note warning flat%}SweetAlert库应该在day.js和lunar.js前面引入!{% endnote %} 放烟花实现SweetAlert2库[2],支持弹窗含有图片,也就是可以弹窗一个放烟花的gif,当然你也可以使用html的visible属性来可视化…

2025中国十大HR SaaS厂商,企业应该如何选择最佳合作伙伴

人力资源软件供应商的价值已远超工具范畴——它们是组织能力的“放大器”、管理革命的“催化剂”。在数字化转型中,企业通过与其深度合作,不仅能实现运营效率的指数级提升,更将人力资本转化为战略资产,构建起适应AI时代的核心竞争力。选择与怎样的供应商同行,将直接决定企…

redis - [09] redis.conf详解

题记部分 配置文件unit单位对大小写不敏感。可以将多个配置文件配置进来绑定ip保护模式 & 端口守护进程,默认是no,需要改成yes如果需要后台运行,需要制定进程文件(pid)指定日志级别,生产环境默认notice。logfile: 日志文件位置名配置数据库的数量,默认16个是否总是…

试用一下Qexo这个Hexo博客内容管理系统

本文由Qexo书写并发布。Qexo介绍 Qexo | 一个美观、强大的在线 静态博客 管理器 (oplog.cn) 本文就不详细介绍Qexo了,官方文档写的很清晰了2333测试样式 测试一下github markdown样式是否正确显示。 This README can be used as a reference for github-flavored-markdown sty…