java面向对象知识点: 封装,构造,重载
目录
封装
封装知识点
private(私有)
public(公共)
二、getter和setter方法
getter方法(访问器方法)
setter方法(修改器方法)
三、封装类的设计原则
单一职责原则
高内聚性
一.Java为什么要封装?
一、数据隐藏与安全性
保护数据不被随意访问
防止外部干扰
二、提高代码的可维护性
易于修改内部实现
代码的模块化
三、代码的复用性
提供统一的接口
隐藏复杂性
Java构造
一、构造函数的基本概念
二、默认构造函数
三、带参数的构造函数
四、构造函数的重载
五、this关键字在构造函数中的使用
六、构造函数与继承的关系
Java重载
一、概念定义
基本概念
二、重载的识别依据
参数个数不同
参数类型不同
参数顺序不同
三、重载与返回类型
返回类型无关
封装
封装知识点
以下是Java封装相关的重要知识点:
一、访问修饰符
private(私有)
含义:这是实现封装的关键修饰符。将类的成员变量(属性)或方法声明为private后,它们只能在所属类的内部被访问。例如:
class Person {private String name;private int age;
}
用途:用于隐藏类的内部数据,防止外部类直接修改或访问这些数据,从而保证数据的安全性和完整性。
public(公共)
含义:公共的成员变量或方法可以被任何类访问。不过,在良好的封装实践中,一般不会直接将属性声明为public,而是通过public的方法来访问私有属性。例如:
class Person {private String name;public String getName() {return name;}public void setName(String newName) {name = newName;}
}
用途:用于提供对外的接口,使得其他类能够与当前类进行交互,同时遵循封装的原则,不直接暴露内部数据。
含义:受保护的成员变量或方法可以被同一个包中的类以及该类的子类访问。例如:
package mypackage;
class Parent {protected int protectedValue;
}
class Child extends Parent {public void accessProtectedValue() {System.out.println(protectedValue);}
}
用途:在继承关系中使用,既允许子类访问父类的部分成员,又在一定程度上限制了外部类的访问,是一种介于private和public之间的访问控制方式。
二、getter和setter方法
getter方法(访问器方法)
定义:getter方法是一种公共的方法,用于获取私有属性的值。它的命名规范通常是 get 加上属性名(属性名首字母大写),如果属性类型为布尔型,也可以使用 is 加上属性名(属性名首字母大写)。例如:
class Circle {private double radius;public double getRadius() {return radius;}
}
作用:提供了一种安全的方式让外部类获取类内部的私有属性值,而不会直接暴露属性本身,这样可以在方法内部添加额外的逻辑,如对返回值进行格式化等。
setter方法(修改器方法)
定义:setter方法用于设置私有属性的值。它的命名规范通常是 set 加上属性名(属性名首字母大写)。例如:
class Circle {private double radius;public void setRadius(double newRadius) {if (newRadius > 0) {radius = newRadius;}}
}
作用:允许外部类修改类内部的私有属性,但可以在方法内部添加验证逻辑,确保传入的值是合法的,从而保证类的内部数据的正确性。
三、封装类的设计原则
单一职责原则
概念:一个类应该只有一个引起它变化的原因。在封装类时,类的功能应该尽可能单一。例如,一个 员工类应该主要关注员工相关的属性(如姓名、工号、工资等)和操作(如获取工资、计算奖金等),而不应该包含与员工无关的功能,如文件读取等。
好处:这样可以使类的结构更清晰,易于理解、维护和扩展。
高内聚性
概念:类内部的各个元素(属性和方法)应该紧密相关,共同完成类的一个或几个相关功能。
好处:高内聚性的类更加独立和稳定,内部逻辑更清晰,有助于提高代码的可维护性和复用性。
四、构造方法与封装
一.Java为什么要封装?
以下是Java中进行封装的几个重要原因:
一、数据隐藏与安全性
保护数据不被随意访问
在Java中,通过将数据成员声明为私有(private),可以防止外部类直接访问和修改这些数据。例如,一个银行账户类 BankAccount 可能有一个私有属性 private double balance; 来表示账户余额。如果没有封装,外部的任何代码都可以直接修改这个余额,这可能会导致数据的不一致性和安全漏洞。
防止外部干扰
封装可以隔离类的内部实现细节与外部代码。
二、提高代码的可维护性
易于修改内部实现
当一个类的内部实现需要改变时,由于封装将类的内部数据和操作与外部隔离开来,只需要修改类内部的代码,而不需要在所有使用这个类的地方进行修改。
代码的模块化
封装有助于将代码划分为独立的模块。
三、代码的复用性
提供统一的接口
封装后的类通过公共方法提供了一个统一的接口供外部使用。
隐藏复杂性
一个复杂的类可能内部包含了很多复杂的逻辑和数据处理过程。通过封装,外部代码不需要了解这些复杂性,只需要按照类提供的接口进行操作。这使得复杂的类更容易被重复使用。
Java构造
一、构造函数的基本概念
构造函数是一种特殊的方法,它在创建对象时被调用,用于初始化对象的状态。
构造函数的名称必须与类名相同。例如,如果有一个类名为 Person ,那么构造函数就应该命名为 Person 。
class Person {// 这是一个构造函数public Person() {// 在这里可以进行初始化操作}
}
二、默认构造函数
如果在类中没有显式地定义任何构造函数,Java编译器会自动为这个类生成一个默认构造函数。
class MyClass {// 由于没有定义构造函数,编译器会生成一个默认构造函数
}
- 但是,一旦在类中定义了任何一个构造函数(无论是带参数还是不带参数),编译器就不会再自动生成默认构造函数了。
三、带参数的构造函数
可以根据需要定义带参数的构造函数,用于根据传入的不同参数值初始化对象的成员变量。
class Rectangle {private int length;private int width;public Rectangle(int l, int w) {length = l;width = w;}
}
四、构造函数的重载
在同一个类中,可以定义多个构造函数,只要它们的参数列表不同(参数的个数、类型或者顺序不同)。
class Circle {private double radius;// 无参数构造函数public Circle() {radius = 1.0;}// 带一个参数的构造函数public Circle(double r) {radius = r;}
}
构造函数重载的好处是可以提供多种方式来创建对象,增加了类的灵活性。
五、this关键字在构造函数中的使用
当成员变量和局部变量(例如构造函数的参数)同名时,可以使用 this 关键字来区分成员变量和局部变量。
在构造函数中, this 表示当前正在创建的对象。
class Student {private String name;public Student(String name) {this.name = name;}
}
this 还可以用来在一个构造函数中调用同一个类的其他构造函数,但必须是构造函数中的第一条语句
class Book {private String title;private String author;public Book() {this("Untitled", "Unknown");}public Book(String title, String author) {this.title = title;this.author = author;}
}
六、构造函数与继承的关系
在继承关系中,子类的构造函数会默认调用父类的无参数构造函数。
如果父类没有无参数构造函数,那么子类的构造函数必须显式地调用父类的构造函数,使用 super 关键字。
class Animal {private String type;public Animal(String type) {this.type = type;}
}
class Dog extends Animal {public Dog(String breed) {super("Dog");// 可以在这里进行子类特有的初始化操作}
}
当创建子类对象时,首先会执行父类的构造函数(如果有多层继承,会按照继承层次依次执行父类的构造函数),然后再执行子类的构造函数。
Java重载
以下是关于Java重载(Overloading)知识点
一、概念定义
基本概念
在Java中,重载是指在同一个类中定义多个方法,这些方法具有相同的名称但参数列表不同。这里的参数列表不同包括参数的个数、类型或者顺序不同
二、重载的识别依据
参数个数不同
可以通过定义不同参数个数的方法来实现重载。
public class PrintUtils {public void print() {System.out.println("Empty print");}public void print(String message) {System.out.println(message);}
}
这里的 print 方法有一个无参数版本和一个带一个 String 参数的版本。
参数类型不同
这是最常见的重载形式。即使方法名相同,只要参数类型不同就可以构成重载。
public class Type {public void check(int num) {System.out.println("Integer: " + num);}public void check(double num) {System.out.println("Double: " + num);}
}
参数顺序不同
当方法有多个参数时,参数顺序不同也可以构成重载。例如:
public class OrderCheck {public void process(int num, String str) {System.out.println("int: " + num + ", String: " + str);}public void process(String str, int num) {System.out.println("String: " + str + ", int: " + num);}
}
三、重载与返回类型
返回类型无关
方法的返回类型不能作为重载的依据,仅仅是返回类型不同而参数列表相同的方法不能构成重载。
相关文章:
java面向对象知识点: 封装,构造,重载
目录 封装 封装知识点 private(私有) public(公共) 二、getter和setter方法 getter方法(访问器方法) setter方法(修改器方法) 三、封装类的设计原则 单一职责原则 高内聚性 一…...
go的math/rand随机数生成器
伪随机数生成器,默认情况下随机数种子是固定的, **注意:**固定的随机数种子每次生成的随机数都是相同的随机数序列 一、基础用法 math/rand 包提供了随机数生成的方法。常用的函数包括: rand.Int():返回一个伪随机…...
JiaJia-CP-1,2,3的WP(2)
一.JiaJia-CP-2 一看题目,聊天软件,用的什么聊天软件直接userassist看运行过什么程序 vol -f JiaJia_Co.raw --profileWin7SP1x64 userassist 发现Telegram.exe(小飞机) 可能性很大啊(真是个摸鱼大神) 除此之外,filescan也能看到࿰…...
3DMAX星空图像生成器插件使用方法详解
3DMAX星空图像生成器插件,一键生成星空或夜空的二维图像。它可用于创建天空盒子或空间场景,或作为2D艺术的天空背景。 【主要特点】 -单击即可创建星空图像或夜空。 -星数、亮度、大小、形状等参数。 -支持任何图像大小(方形)。…...
ROS2 系列学习教程(总目录)
ROS2Learning ROS1 系列学习教程(总目录) 一、ROS2 简介 1.1 ROS2简介及学习资源汇总 二、ROS2 基础 2.1 ROS2安装详细教程(以Humble为例) 2.2 ROS2 构建系统 colcon 介绍、安装与使用 2.3 ROS2 与 ROS1 编码方式对比 ROS2 与 ROS1 编码方式对比&am…...
[GKCTF 2021]签到
[GKCTF 2021]签到 wireshark跟踪http流,基本编解码,倒叙,栅栏密码 找到cat /f14g 把包里返回的字符串先hex解码,再base64解码,看到一个时间是倒叙,不含flag 继续往下面翻,可以看到cat%2Ff14g%7…...
Kubernetes——part11 云原生中间件上云部署 Rocketmqkafkazookeeper
Rocketmq rocketmq角色 RocketMQ由四部分构成:Producer、Consumer、Broker和NameServer 启动顺序:NameServer->Broker 为了消除单点故障,增加可靠性或增大吞吐量,可以在多台机器上部署多个nameserver和broker,并…...
ip租期到了
当IP租约到期后,会发生以下过程: 租约到期通知:在租约到期之前,DHCP客户端通常会尝试续租其IP地址。如果客户端仍然活跃并且希望继续使用相同的IP地址,它会向DHCP服务器发送一个DHCP请求(DHCPREQUEST&#…...
鸿蒙系统(harmony)支持Android应用的双框架技术架构分析
鸿蒙系统(HarmonyOS)支持 Android 应用的双框架技术架构 是为了在鸿蒙操作系统上实现对 Android 应用的兼容与支持,特别是在多设备生态下,确保不同类型的 Android 应用能够无缝运行在鸿蒙设备上。这种双框架架构使鸿蒙能够兼顾自身的原生应用生态和 Android 的广泛应用生态…...
面积等效原理
面积等效原理 电力电子技术中的面积等效原理主要应用在PWM(Pulse Width Modulation,脉冲宽度调制)控制技术中。 定义 面积等效原理:当冲量(即窄脉冲的面积)相等而形状不同的窄脉冲加在具有惯性的环节上时…...
【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用
一、什么是BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简…...
大小写转换
描述 将下面的字符串中的大小写进行转换。 输入描述 输入一行仅包含字母的字符串(字符串长度 ≤100)。 输出描述 将其中的大写转换为小写,小写转换为大写。 abcD ABCd #include<iostream> #include<string> using namespace std; int main() { …...
手机镜头组如此突出,考虑恢复以前设计
现在手头看重照相。结果导致的问题就是,在背部要突出很高,以容纳镜头组件。这种设计真的好吗?并不见得。真实照片: VIVO X200系列镜头组照片-CSDN博客 考虑到现在镜头的情形,我建议恢复以前的设计,就是把镜…...
浅谈人工智能之基于容器云进行图生视频大模型搭建
浅谈人工智能之基于容器云进行图生视频大模型搭建 根据之前我们所讲过的内容: 文生图 文生视频 我们继续讲解图生视频大模型搭建。 引言 随着深度学习技术的不断发展,图生视频(image-to-video)大模型成为了计算机视觉和自然语言…...
大型复杂项目管理怎么结合传统与敏捷
大型复杂项目管理需要综合运用传统的瀑布模型与敏捷方法,两者各具优势,可以在不同的项目阶段和需求下发挥最大效能。首先,在项目的初期阶段,传统方法的详细规划和需求分析能够帮助确保项目方向正确、资源充足;敏捷方法…...
家校通小程序实战教程04教师管理
目录 1 创建数据源2 搭建管理后台3 搭建查询条件4 功能测试总结 我们上一篇介绍了如何将学生加入班级,学生加入之后就需要教师加入了。教师分为任课老师和班主任,班主任相当于一个班级的管理员,日常可以发布各种任务,发布接龙&…...
UI控件使用说明
文章目录 一、控件的公共属性二、常用控件的私有属性三、控件的显示与隐藏 一、控件的公共属性 struct element {u32 highlight: 1; //高亮标志u32 state: 3; //内核记录控件的状态u32 ref: 5; //内核计数值u32 prj: 3; //工程序号u32 hide_action: 1; //HIDE_WI…...
树莓派2安装jupyterlab以便更好的编程体验
树莓派2 是一款很老的开发板了,但是它还能继续战斗。为了更好的编程体验,准备安装jupyterlab 安装jupyterlab 使用命令: pip install jupyterlab 该过程非常漫长,因为树莓派2是很老的板子,它需要安装一些arm7版本的…...
计算机网络常见面试题总结(上)
计算机网络基础 网络分层模型 OSI 七层模型是什么?每一层的作用是什么? OSI 七层模型 是国际标准化组织提出的一个网络分层模型,其大体结构以及每一层提供的功能如下图所示: 每一层都专注做一件事情,并且每一层都需…...
k8s 亲和性之Affinity
文章目录 1. Node Affinity(节点亲和性)节点亲和性类型配置示例常见场景: 2. Pod Affinity 和 Pod Anti-AffinityPod Affinity 配置示例Pod Anti-Affinity 配置示例常见场景: 3. 亲和性规则概述4. 亲和性和反亲和性的细节5. 亲和性…...
SpringBoot 插件化开发模式
一、前言 1.1 使用插件的好处 1.1.1 模块解耦 实现服务模块之间解耦的方式有很多,但是插件来说,其解耦的程度似乎更高,而且更灵活,可定制化、个性化更好。 举例来说,代码中可以使用设计模式来选择使用哪种方式发送…...
基于树莓派的安保巡逻机器人--项目介绍
目录 一、项目简介 二、项目背景 三、作品研发技术方案 作品主要内容: 方案的科学性 设计的合理性 四、作品创新性及特点 五、作品自我评价 本篇为项目“基于树莓派的安保巡逻机器人”介绍博客 演示视频链接: 基于树莓派的安保巡逻机器人_音游…...
Python学习笔记8-函数1
自定义函数 def 函数名(形参):函数体return 空/变量/对象/表达式 形参:函数定义时声明的参数实参:函数调用时传入的参数。函数只需要定义一次,就可以被多次使用当函数被调用时,才执行函数体,定义时不执行 文档注释 …...
如何使用ST7789展现图片?[ESP--4]
本节我们继续ESP和ST 7789的话题,这节课我们来学学如何展示图片,话不多说,先上效果 好,教程开始~前情提要,要看懂这篇,建议搭配楼主的前两期文章 使用ESP32驱动LCD-ST7789屏幕[ESP–2] 加速你的LCD-ST7789屏幕…...
【QNX+Android虚拟化方案】129 - USB眼图参数配置
【QNX+Android虚拟化方案】129 - USB眼图参数配置 1. 软件侧dts如何配置眼图参数 及 其对应关系2. 硬件 QNX 侧调试眼图命令2.1 High Speed USB2.0 Host2.2 Super Speed USB3.0 Host3. 硬件 Android 侧调试眼图命令基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不…...
【机器学习】探索机器学习决策树算法的奥秘
决策树 前言基本概念常见的决策树算法ID3算法C4.5算法CART算法 决策树的优缺点应用场景决策树的可视化总结 前言 在当今这个数据驱动的时代,机器学习作为数据分析与预测的利器,正以前所未有的速度改变着我们的生活和工作方式。在众多机器学习算法中&…...
K8S版本和istio版本的对照关系
版本对照关系 下载地址1 下载地址2...
嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压
引言:本文你能实际的了解到实战量产产品中电源架构设计的要求和过程,并且从实际实践出发搞懂电源架构系统,你也可以模仿此架构抄板到你自己的项目,并结合硬件篇之前的项目以及理论形成正真的三路电源输入设计与开发板电源架构块供…...
【机器学习】机器学习的基本分类-监督学习-逻辑回归-Sigmoid 函数
Sigmoid 函数是一种常用的激活函数,尤其在神经网络和逻辑回归中扮演重要角色。它将输入的实数映射到区间 (0, 1),形状类似于字母 "S"。 1. 定义与公式 Sigmoid 函数的公式为: 特点 输出范围:(0, 1),适合用…...
EasyDarwin搭建直播推流服务
学习链接 easydarwin官网 - 这里看介绍 easydarwin软件下载地址 - 百度网盘 easydarwin视频 B站 文章目录 学习链接使用下载EasyDarwin压缩包,并解压到目录启动EasyDarwin点播直播easyplayer.jsapidocffmpeg推流rtsp & ffplay拉流 使用 下载EasyDarwin压缩包…...
苏宁易购网站建设 的定位/网络营销论坛
http://acm.hdu.edu.cn/showproblem.php?pid1142 Dijkstra求最短路径,记录最短路径的条数,cnt记录最短路径的条数出错,不知道错在哪里? View Code 1 #include<iostream> 2 #include<cstring> 3 #include<clim…...
微信网站/百度下载链接
Charge eXchange Recombination Spectroscopy 诊断原理: 中性原子获取过程: 只有离子才能加速,因此采用离子源(氘)。离子加速后进入中性气体室,变为中性。少数没有变为中性的经过偏转体进入离子吸食器。变…...
安徽 网站建设/sem是什么职业
如果你想使用 BeautifulSoup 来提取这个 HTML 代码中的 元素里面的内容,你可以这样做: 首先,你需要安装 BeautifulSoup 库: pipinstall beautifulsoup4...
网站搜索排名/搜索引擎营销是什么
1: 杀死自己进程的方法 android.os.Process.killProcess(Process.myPid()); 2:杀死别人进程的方法(不能杀死自己) -------a: activityManager.killBackgroundProcesses ActivityManager activityManager (ActivityManager) getSy…...
重庆智慧团建网站登录平台/苏州seo关键词优化软件
标签: 转自:http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通过命令进行驱动。Selenium 可归纳为三种“风格”:动作、辅助和断言。每一个命令调用就是下表中的一行。 命令 目标 值 动作(Actions)命令一般用于操作应用…...
无忧中英繁企业网站系统通用版/软文案例200字
产品人,就是去发现问题、定义问题及解决问题的人。 甚至,我们所有的人,所有的生活就是在解决问题! 这里将如何解决问题及解决问题的方法做一个梳理,参考了一个很多人未听说过的解决问题的系统化方法。 发现问题&…...