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. 亲和性…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...