当前位置: 首页 > news >正文

9.Java面向对象----封装

Java面向对象—封装

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
面向对象的三大核心特性:

  • 封装性
  • 继承性
  • 多态性

今天我们重点来讲解Java面向对象的第一个特性:封装性。

一、package和import语句

所谓的封装,其实很好理解,就是将代码通过包装的方式存放起来。既然是通过包装的方式,那么我们可以理解为将代码存放在一个容器当中,这个容器,我们称之为包。

1、package关键字:是用来定义包的。

示例代码:

package com.admin.bean;

代码解析:

Java通过package关键字定义了包,根据不同层级的延伸,编译工具会自动为项目创建相应层级的包。就好像我们在电脑中的某个盘符下创建的文件夹。根据示例代码,也就是我们这个类存放在项目目录下的com–admin–bean文件夹下。如果代码中没有出现package关键字,则证明该类存储于项目的src根目录下,包为默认包。

2、import关键字:是用来引用包的,我们的类或者Java的开发类,都存放在不同包下,当我们要是用这个类时,就需要将这个类引入,使用import关键字进行引用。同包下的类不需要引用,就可以直接使用。
示例代码:

import java.util.*;

代码解析:
Java通过import关键字,将java包下的util包下的所有类都进行了引用。

3、Java常用包

  • Java.lang:包含一些Java语言的核心类,如:String、Math、Integer、System和Thread,提供常用功能
  • java.awt:包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
  • java.net:包含执行与网络相关的操作类
  • java.io:包含能提供多种输入/输出功能的类
  • java.util:包含一些使用工具类,如:使用与日期相关的函数等

总结:在Java语言中,所有引用于其他包下的类,都需要用import引用,只有java.lang包作为核心类不需要引用可直接使用。

二、封装

1、封装的定义

封装是 Java 面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内部结构。也就是说,如果我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了。

2、封装的作用

封装迫使用户通过方法访问数据能保护对象的数据不被误修改,还能使对象的重用变得更简单。数据隐藏通常指的就是封装。它将对象的外部界面与对象的实现区分开来,隐藏实现细节。迫使用户去使用外部对象,即使实现细节改变,还可通过对象承担其功能而保留原样,确保调用它的代码还继续工作。封装使代码维护更简单。

3、封装的特点

  • 把类的属性隐藏,提供公共方法对其访问
  • 提高了代码的复用性
  • 提高了代码的安全性

4、封装的方式

  • 私有化成员变量
  • 私有化成员变量,使用private关键字修饰。

代码示例:

public class Admin {private String name;private int age;private String phone;private String password;}
  • 设置构造方法(函数)
  • 为类创建构造方法(函数),构造方法用来实例化类对象

代码示例:

public class Admin {private String name;private int age;private String phone;private String password;public Admin() {}public Admin(String name,int age,String phone,String password) {this.name=name;this.age=age;this.phone=phone;this.password=password;}
}
  • 设置成员变量的公共方法进行访问

为每个成员变量(类的属性)创建get()和set()方法,get()方法表示获取属性,set()方法表示为属性赋值。

package com.admin.bean;public class Admin {private String name;private int age;private String phone;private String password;public Admin() {}public Admin(String name,int age,String phone,String password) {this.name=name;this.age=age;this.phone=phone;this.password=password;}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;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
  • 使用this关键字引用

使用this关键字,指向本类属性,用来与形式参数区分。

package com.admin.bean;public class Admin {private String name;private int age;private String phone;private String password;public Admin() {}public Admin(String name,int age,String phone,String password) {this.name=name;this.age=age;this.phone=phone;this.password=password;}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;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

附录:Java的访问修饰符
访问修饰符是用来控制类、属性、方法被访问的权限的。访问修饰符巧妙的实现了Java面向对象的访问权限。
在这里插入图片描述
private:
1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。
2.在当前类之外,使用对象(或是类名,针对静态的)打点调用都是被限制的。这时候有同学问,那我开发的这个私有的成员难道不能使用了吗?不是,可以通过在当前类中开发一个公有的方法,在公有方法中可以使用这个私有的成员,从而达到间接使用私有成员。
3.在继承中,私有成员禁止被继承,也就是说在子类的开发中,拒绝直接使用私有成员的名字进行使用。
public:
1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。
2.在当前类之外,使用对象(或是类名,针对静态的)打点调用是被允许的。
3.在子类中,公有成员允许被继承,也就是说在子类的开发中,可以直接使用公有成员的名字进行使用。
protected:
protected这个修饰符比较繁琐,它涉及到是否是同一个包的问题。
同一个包的情况:
1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。
2.在当前类之外,同一个包中,使用对象(或是类名,针对静态的)打点调用是被允许的。
3.在子类中,同一个包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中可以使用子类或是父类对象打点调用。
4.在当前类之外,子类之外,要使用子类的类中,同一个包中,可以使用子类或是父类对象打点调用。
不同包的情况:
1.在当前类之外,不同包中,使用对象(或是类名,针对静态的)打点调用是被禁止的。
2.在子类中,不同包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中只能通过子类对象打点调用。父类对象不行,这个时候相当于父类中的受保护成员跨包了。
3.在当前类之外,子类之外,要使用子类的类中,与子类同一个包中,通过子类对象打点是调用不出父类中的受保护的成员的。父类对象更不行,这个时候相当于父类中的受保护成员跨包了。如果想要通过子类对象调用父类的受保护的成员,需要重新覆写父类的这个成员。
4.在当前类之外,子类之外,要使用子类的类中,与父类同一个包中,通过子类对象打点是可以调用父类中的受保护的成员的。父类对象也行,同个包中。
5.在与父类和子类都不同包的第三个包中,要想通过子类对象调用父类的受保护成员,可以通过覆写父类受保护成员,并将访问限制符修改成public。

总结:private只能自己访问,public所有人都可以访问,protected只能在父子类中访问

相关文章:

9.Java面向对象----封装

Java面向对象—封装 面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统…...

【react 全家桶】组合组件

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录09 【组合组件】1.包含关系2.特例关系问题…...

VUE_学习笔记

一、 xx 二、模板语法 1.模板语法之差值语法 &#xff1a;{{ }} 主要研究&#xff1a;{{ 这里可以写什么}} 在data中声明的变量、函数等都可以。常量只要是合法的javascript表达式&#xff0c;都可以。模板表达式都被放在沙盒中&#xff0c;只能访问全局变量的一个白名单&a…...

【分布式事务AT模式 SpringCloud集成Seata框架】分布式事务框架Seata详细讲解

前言 上篇文章我们讲述了如何启动seata的本地服务&#xff0c;并且注册到nacos使用&#xff0c;这篇文章将在SpringCloud中整合Seata框架 上篇文章传送门&#xff1a;https://blog.csdn.net/Syals/article/details/130102851?spm1001.2014.3001.5501 本篇主要内容&#xff…...

系统集成项目管理工程师软考第三章习题(每天更新)

第一章指路&#xff1a;系统集成项目管理工程师软考第一章习题&#xff08;已完结&#xff09;_程序猿幼苗的博客-CSDN博客 第二章指路&#xff1a;系统集成项目管理工程师软考第二章习题&#xff08;已完结&#xff09;_程序猿幼苗的博客-CSDN博客 第3章信息系统集成专业技术…...

FIFO的工作原理及其设计

1.简介 FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器&#xff0c;即第一个进入其内的数据第一个被移出&#xff0c;其中一个口是存储器的输入口&#xff0c;另一个口是存储器的输出口。 对于单片FIFO来说&#xff0c;主要有两种…...

「UG/NX」Block UI 通过浏览器选择文件File Selection with Browse

目录 控件说明界面效果公有属性对话框标题 DialogLabel(仅创建)控件灰显 Enable分组 Group(仅创建)控件显隐 Show控件标题 Label国籍文本 AllowInternationalTextInput(仅创建)显示密文 IsPassword(仅创建)本地化 Localize(仅创建)保存值 RetainValue属性界面代码实现…...

面试官:如何搭建Prometheus和Grafana对业务指标进行监控?

Prometheus和Grafana都是非常流行的开源监控工具&#xff0c;可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。 下面对Prometheus和Grafana进行简要介绍&#xff1a; Prometheus Prometheus是一款开源、云原生的系统和服务监控工具&#xff0c;它采用p…...

SQL Server 创建登录账号、创建用户名并为数据库赋予db_owner权限

服务器级的固定角色及其权限 sysadminsysadmin 固定服务器角色成员可以在服务器执行任何操作serveradminserveradmin 固定服务器角色的成员可以更该服务器范围的配置选项和关闭服务器sercurityadmin sercurityadmin 固定服务器角色的成员管理登录名及其属性,他们可以grant、de…...

离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)

集合与函数2.1 集合 2.1.1 集合的基本概念 2.1.2 集合的表示方法 2.1.3 文氏图 2.1.4 证明集合相等 2.1.5 集合的大小 ——基 2.1.6 幂集 2.1.7 集族、指标集 2.1.8 笛卡尔积 2.1.9 容斥原理2.1 集合 2.1.1 集合的基本概念 定义1&#xff1a;集合 是不同对象的一个无序的聚…...

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作&#xff0c;不仅可以写一些基础的类似python、java、js的代码段&#xff0c;还可以做一定量的调优&#xff0c;于是就开始担忧起来&#xff0c;到哪天我的开发工作会不会被ChatGPT这个工具给取代了&#xff1f; 目录 1. ChatGPT…...

尚硅谷大数据技术Hadoop教程-笔记04【Hadoop-MapReduce】

视频地址&#xff1a;尚硅谷大数据Hadoop教程&#xff08;Hadoop 3.x安装搭建到集群调优&#xff09; 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅谷大数据技术Ha…...

Linux信号sigaction / signal

Linux信号sigaction / signal 文章目录Linux信号sigaction / signal目的函数原型struct sigaction信号枚举值ISO C99 signals.Historical signals specified by POSIX.New(er) POSIX signals (1003.1-2008, 1003.1-2013).Nonstandard signals found in all modern POSIX system…...

坦克大战第一阶段代码

package tanke.game;import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Vector;//为了监听键盘事件&#xff0c;实现keylistener public class mypanel extends JPanel implements KeyListener …...

博客系统前端实现

目录 1.预期效果 2.实现博客列表页 3.实现博客正文页 4.实现博客登录页 5.实现博客编辑页面 1.预期效果 对前端html,css,js有大致的了解后,现在我们实现了一个博客系统的前端页面.一共分为四个页面没分别是:登陆页面,博客列表页,博客正文页,博客编辑页 我们看下四个界面…...

ChatGPT技术原理、研究框架,应用实践及发展趋势(附166份报告)

​ 一、AI框架重要性日益突显&#xff0c;框架技术发展进入繁荣期&#xff0c;国内AI框架技术加速发展&#xff1a; 1、AI框架作为衔接数据和模型的重要桥梁&#xff0c;发展进入繁荣期&#xff0c;国内外框架功能及性能加速迭代&#xff1b; 2、Pytorch、Tensorflow占据AI框…...

【屏幕自适应页面适配问题】CSS的@media,为了适应1440×900的屏幕,使用@media解决问题

文章目录bug修改实例CSS3 media 查询CSS 多媒体查询&#xff0c;适配各种设备尺寸bug修改实例 <template><div id"deptAllDown" style"height: 400px;width:880px"/> </template>为了适应1440900的屏幕&#xff0c;使用media解决问题 …...

一篇文章理解堆栈溢出

一篇文章理解堆栈溢出引言栈溢出ret2text答案ret2shellcode答案ret2syscall答案栈迁移答案堆溢出 unlink - UAF堆结构小提示向前合并/向后合并堆溢出题答案引言 让新手快速理解堆栈溢出&#xff0c;尽可能写的简单一些。 栈溢出 代码执行到进入函数之前都会记录返回地址到SP…...

优化模型验证关键代码27:多旅行商问题的变体-多起点单目的地问题和多汉密尔顿路径问题

目录 1 多起点单目的地问题(Multiple departures single destination mTSP) 1.1 符号列表 1.2 数学模型 1.4 解的可视化结果...

快速搭建第一个SpringCloud程序

目录 1、Spring Boot项目脚手架快速搭建 1.1 生成工程基本配置 1.2 生成工程。 1.3 导入开发工具&#xff08;此处为Idea&#xff09; 1.4 运行代码 1.5 验证是否能访问 2、Spring Cloud环境搭建 2.1 版本匹配问题 2.2 Spring Cloud环境测试 3、引入Eureka Server 3…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...