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

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也能看到&#xff0…...

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)。 输出描述 将其中的大写转换为小写&#xff0c;小写转换为大写。 abcD ABCd #include<iostream> #include<string> using namespace std; int main() { …...

手机镜头组如此突出,考虑恢复以前设计

现在手头看重照相。结果导致的问题就是&#xff0c;在背部要突出很高&#xff0c;以容纳镜头组件。这种设计真的好吗&#xff1f;并不见得。真实照片&#xff1a; VIVO X200系列镜头组照片-CSDN博客 考虑到现在镜头的情形&#xff0c;我建议恢复以前的设计&#xff0c;就是把镜…...

浅谈人工智能之基于容器云进行图生视频大模型搭建

浅谈人工智能之基于容器云进行图生视频大模型搭建 根据之前我们所讲过的内容&#xff1a; 文生图 文生视频 我们继续讲解图生视频大模型搭建。 引言 随着深度学习技术的不断发展&#xff0c;图生视频&#xff08;image-to-video&#xff09;大模型成为了计算机视觉和自然语言…...

大型复杂项目管理怎么结合传统与敏捷

大型复杂项目管理需要综合运用传统的瀑布模型与敏捷方法&#xff0c;两者各具优势&#xff0c;可以在不同的项目阶段和需求下发挥最大效能。首先&#xff0c;在项目的初期阶段&#xff0c;传统方法的详细规划和需求分析能够帮助确保项目方向正确、资源充足&#xff1b;敏捷方法…...

家校通小程序实战教程04教师管理

目录 1 创建数据源2 搭建管理后台3 搭建查询条件4 功能测试总结 我们上一篇介绍了如何将学生加入班级&#xff0c;学生加入之后就需要教师加入了。教师分为任课老师和班主任&#xff0c;班主任相当于一个班级的管理员&#xff0c;日常可以发布各种任务&#xff0c;发布接龙&…...

UI控件使用说明

文章目录 一、控件的公共属性二、常用控件的私有属性三、控件的显示与隐藏 一、控件的公共属性 struct element {u32 highlight: 1; //高亮标志u32 state: 3; //内核记录控件的状态u32 ref: 5; //内核计数值u32 prj: 3; //工程序号u32 hide_action: 1; //HIDE_WI…...

树莓派2安装jupyterlab以便更好的编程体验

树莓派2 是一款很老的开发板了&#xff0c;但是它还能继续战斗。为了更好的编程体验&#xff0c;准备安装jupyterlab 安装jupyterlab 使用命令&#xff1a; pip install jupyterlab 该过程非常漫长&#xff0c;因为树莓派2是很老的板子&#xff0c;它需要安装一些arm7版本的…...

计算机网络常见面试题总结(上)

计算机网络基础 网络分层模型 OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出的一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都需…...

k8s 亲和性之Affinity

文章目录 1. Node Affinity&#xff08;节点亲和性&#xff09;节点亲和性类型配置示例常见场景&#xff1a; 2. Pod Affinity 和 Pod Anti-AffinityPod Affinity 配置示例Pod Anti-Affinity 配置示例常见场景&#xff1a; 3. 亲和性规则概述4. 亲和性和反亲和性的细节5. 亲和性…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...