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. 亲和性…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...

未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
AT模式下的全局锁冲突如何解决?
一、全局锁冲突解决方案 1. 业务层重试机制(推荐方案) Service public class OrderService {GlobalTransactionalRetryable(maxAttempts 3, backoff Backoff(delay 100))public void createOrder(OrderDTO order) {// 库存扣减(自动加全…...

Java高级 |【实验八】springboot 使用Websocket
隶属文章:Java高级 | (二十二)Java常用类库-CSDN博客 系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...