Java面向对象:封装

news2025/1/16 14:04:10

1.封装:

  • 面向对象的三大特征:

封装、继承、多态

  • 它是什么:

封装:告诉我们,如何正确设计对象的属性和方法。

封装的原则:对象代表什么,就得封装对应数据,并提供数据对应的行为。

  • 理解封装思想:
  • 需求一:

设计一个:人对象,要求这个对象有:名称,年龄,吃饭,睡觉;

public class People{
        名称
        年龄
        吃饭
        睡觉
}
  • 需求二:

 人画⚪

请针对这个需要面向对象设计

分析:

1.涉及到两个对象:人、圆;

2.需求是人画圆,这属于一种行为,因此需要在圆对象里封装画圆的数据以及画圆的行为方法,提供给人使用,完成人画圆;

3.圆对象的成员变量:圆半径;成员方法:画圆。

实现:

 需求三:

  人关门

  • 请针对这个需求面向对象设计

  • 分析:

    1. 涉及到2个对象:人、门;
    2. 因为需求人关门,这属于一种行为,因此需要在门对象里封装关门的行为方法,提供给人使用,完成人关门
    3. 门对象:成员方法:关门
  • 实现

如果以上还不能理解的话,那就再举一个例子:

  • 需求:张三砍死了李四

 

 

  • 请根据这个需求面向对象设计:

    1. 就问张三砍死了李四,是张三死亡,还是李四死亡?

      答:肯定是李四死亡。

    2. 那么死亡的方法是定义在张三,还是定义在李四?

      答:肯定是定义在李四。

    3. 那么用程序员的思想怎么理解这个杀人案件?

      答:是张三 调用了 李四的死亡方法,致使李四死亡。

2.理解封装思想的好处

sum公司在开发Java编程语言的时候,已经写了各种各样的对象,这些对象,方便我们程序员用来解决实际开发中的业务问题

 举个例子:sum公司知道对字符串的操作是很常见的,所以,就给我们程序员提供了一个代表字符串的对象

       拥有操作字符串的很多方法

  • 有啥事?找对象,调用方法就行,传参数就行,编程变得很简单

  • 降低我们的学习成本,可以少学、少记一点,用的时候,看一下文档就好了

二、优化封装

1. 如何进行更好的封装

  • 一般建议对成员变量使用private(私有、隐藏)关键字修饰进(private修饰的成员只能在当前类中访问)。

    • 这种写法,在实际开发中,非常的不好,不推荐使用

 使用private关键字修饰的成员只能在当前类中访问

 

就好比,你现实中刚认识一个妹子,她不可能一下子就给你暴露她的年龄或者隐私吧!

合理暴露:为每个成员变量提供配套public修饰的getter、setter方法,暴露其取值和赋值。

像这样,通过getAge方法给我们取值;通过setAge方法给我们赋值,并且对所赋值进行一些合法判断。

2. 优化封装小案例

  • 需求:录入学生年龄并判断年龄是否正常

    • 学生类

package Test;

public class Student {
    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) {
        if (age >=0 && age <= 200){
            this.age = age;
        }else {
            System.out.println(this.name + "的年龄不正常!!!");
        }
    }
}

实现类

public class StudentTest {
    public static void main(String[] args) {
        Student stu1 = new Student();
        stu1.setName("黑猫警长");
        stu1.setAge(15);
        System.out.println(stu1.getName()+"的年龄是"+stu1.getAge());

        System.out.println("-----------------");
        Student stu2 = new Student();
        stu2.setName("一只耳");
        stu2.setAge(-14);

        System.out.println(stu2.getName()+"的年龄是"+stu2.getAge());
    }
}

控制台输出结果:

 

  • 可以看到,黑猫警长的年龄经过setAge方法的判断是正常范围,所以可以正常赋值,输出是赋值后的数据

  • 一只耳的年龄经过setAge方法的判断不是正常范围,所以不可以进行赋值,输出的是默认值

重点总结

1、如何进行更好的封装?

  • 一般会把成员变量使用private隐藏起来,对外就不能直接访问了
  • 为每个成员变量提供public修饰的getter、setter方法,暴露其取值和赋值

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

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

相关文章

GUI编程--PyQt5--QWidget

文章目录QWidget简介功能作用控件的创建坐标系统控件位置与大小调整位置与尺寸最大、最小尺寸控件内容外边距设置鼠标的形状鼠标跟踪QWidget简介 控件是用户界面的最小元素&#xff0c;是一个矩形局域。没有父控件的控件为顶级控件&#xff0c;会装饰一个标题栏&#xff0c;成…

CentOS7源码安装 lldpd 并附查询脚本

文章目录源码安装 lldpd查询交换机端口的 lldpd 脚本查询交换机端口的 lldpad 脚本关于CentOS7上配置LLDP的文章&#xff0c;网络上已经很多了。实现交换机端口的抓取&#xff0c;众多周知的有两种工具&#xff0c;一种是lldpad&#xff0c;另一种是lldpd。 源码安装 lldpd 在…

get_post (攻防世界)(简单php)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 解题工具: 需要使用hackerbar (也可以用burpsuite) 问题解析: 科普时间又到 GET方法 用来向服务器请求数据。 是常见的HTTP方法之一。 查询字符是在URL中发送的&#xff1a; /…

led台灯哪个牌子质量好?2022最新的台灯牌子排名

众所周知&#xff0c;现在绝大部分台灯都是使用led灯珠作为发光源&#xff0c;led台灯作为主流的选择&#xff0c;在光线舒适度、光线调控性、台灯售价、显色与防护、节能环保等方面都是非常出色的&#xff0c;远超以前的传统白炽灯。那么现在市面上led台灯这么多&#xff0c;选…

甬矽电子在科创板上市:市值达到122亿元,王顺波为实际控制人

11月16日&#xff0c;甬矽电子&#xff08;宁波&#xff09;股份有限公司&#xff08;下称“甬矽电子”&#xff0c;SH:688362&#xff09;在科创板上市。本次在科创板上市&#xff0c;甬矽电子发行6000万股&#xff0c;发行价格为18.54元/股&#xff0c;募资总额为11.24亿元。…

java单例模式

单例设计模式:Spring中的Bean默认都是单例的。 概念 全世界就只要一个---在整个java程序中&#xff0c;只有这个类的一个实例 比如Student a new Student(); 就是Student类只创建这一个实例&#xff0c;只能有这一个对象存在 主要解决&#xff1a;一个全局使用的类频繁地创…

人工蜂群优化及其在资源管理中的应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

单钩点弹珠/片经验总结

开锁的方向&#xff1a;不要管主驾驶室在车子的左边还是右边&#xff0c;记住朝车头开启就可以。 开锁技巧&#xff1a;我们将HU101工具插入锁孔以后&#xff0c;摆好姿势&#xff0c;先拨动撬杆试探性的去点击弹片&#xff0c;一般我们会发现锁芯里面的弹片主要是下面一些排列…

Mysql系列三:Innodb MVCC版本控制

文章目录一、Innodb MVCC版本控制1、什么是MVCC版本控制&#xff1f;2、Innodb MVCC 核心3、事物版本号、隐藏列、undo log日志的协调工作机制4、Read view5、举例讲解MVCC流程6、InnoDB 引擎不同隔离级别MVCC的区别7、MVCC是否解决了幻读的问题一、Innodb MVCC版本控制 1、什…

项目实战 Java读取Excel数据

项目实战 Java读取Excel数据前言实现步骤导入POI依赖示例Excel表结构编写读取Excel工具类实现思路读取Excel数据工具类实现代码取出从excel中获取的数据&#xff0c;并插入到数据库中总结如果博主的文章对您有所帮助&#xff0c;可以评论、点赞、收藏&#xff0c;支持一下博主!…

jQuery复习

jQuery&#xff1a;是一个js函数库&#xff0c;口号写少 做多 write less do more 封装简化DOM操作&#xff08;增删改查&#xff09;/ajax 为什么使用&#xff1a;强大的选择器&#xff1a;方便快速查找DOM元素 隐式遍历&#xff1a;一次监听多个 读写合一&#xff1a;读数据&…

DEFORMABLE DETR学习笔记

DEFORMABLE DETR学习笔记 DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION ABSTRACT DETR最近被提出&#xff0c;以消除在目标检测中需要许多手工设计的组件&#xff0c;同时展示良好的性能。但由于Transformer注意模块在处理图像特征映射时的局…

基于51单片机驱动A4988实现步进电机逆时针转动

基于51单片机驱动A4988实现步进电机逆时针转动一、简介二、接线典型接线图实际接线三、部分代码引脚定义定时器初始化主函数四、实验现象五、注意事项一、简介 A4988 是一款完全的微步电动机驱动器&#xff0c;带有内置转换器&#xff0c;易于操作。该产 品可在全、半、1/4、1…

Synchronized 与 Lock 的使用

Synchronized的使用 以卖票为例 //基本的卖票例子/*真正的多线程开发&#xff0c;公司中的开发,降低耦合性线程就是一个单独的资源类&#xff0c;没有任何附属的操作1.属性、方法*/ public class SaleTicketDemo01 {public static void main(String[] args) {//多个线程操作同…

python 可视化解释模型

1. 自定义DataSet MakeDataset.py 首先准备好一个数据集文件&#xff0c;这里以mydata文件夹存放图片数据&#xff0c; 实现自定义DataSet class MyDataset(Dataset):def __init__(self,resize):super(MyDataset,self).__init__()self.resize resizedef __len__(self):retur…

【软件分析第13讲-学习笔记】符号执行 Symbolic Execution

文章目录前言正文符号执行基于霍尔逻辑的符号执行谓词转换计算最弱前置条件动态符号执行符号执行&#xff1a;进一步探究小结参考文献前言 创作开始时间&#xff1a;2022年11月16日18:46:31 如题&#xff0c;学习一下符号执行 Symbolic Execution的相关知识。参考&#xff1a…

计算机毕业设计jsp家校互动系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 家校互动系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使用jav…

Linux用户操作(22.9.21)

学习目标&#xff1a; 用户账号管理Linux用户操作Linux用户组操作&#xff08;一&#xff09;用户账号管理 1、用户与用户组文件 在Linux系统当中&#xff0c;默认情况下所有用户信息保存在 /etc/passwd文件内&#xff0c;用户密码信息保存在/etc/shadow文件内&#xff1b;所…

43、Spring AMQP TopicExchange

1、TopicExchange 2、案例 3、通过配置类实现 1、配置TopicConfig 2、添加Listener 3、测试结果 4、通过注解实现 1、配置Linstener 2、测试结果 5、总结分析 学到这里&#xff0c;关于RabbitMQ的五种消息模型就结束了。 1、第一种消息模型&#xff1a;单个队列&#xff0c…

相机模型总结

目录相机模型前言1. pinhole 针孔模型2. Omnidirectional Camera Model 全向相机模型2.1 Unified model for catadioptric cameras 反射式相机统一模型2.2 Extended Unified model for catadioptric cameras (EUCM)2.3 Omnidirectional Camera Model By Scaramuzza畸变模型1. E…