java面向对象编程【高级篇】之继承
目录
- 🚀前言
- 🤔什么是继承?
- 🌟权限修饰符
- 💯private 修饰符
- 💯默认(无修饰符)
- 💯protected 修饰符
- 💯public 修饰符
- 💯归纳
- 🦜继承的特点
- 💯单继承
- 💯Object类
- 💯就近原则
- ✍️方法重写
- 💯@Override
- 💯方法重写的注意事项
- 💯toString方法重写
- 🐧子类构造器的特点
- 💯this与super的区别
🚀前言
大家好!我是 EnigmaCoder。
本文主要介绍java面向对象编程中的继承部分,包括定义、权限修饰符、特点、方法重写等。
🤔什么是继承?
在java中,继承是面向对象的三大特性之一,它允许一个类(称为子类或派生类)直接获取另一个类(称为父类或超类或基类)的属性和方法,从而实现代码重用和建立类之间的层次关系。
- 使用
extends
关键字完成继承,格式如下:
class A{} //父类A
class B extends A{} //子类B继承父类A
- 子类能继承父类的非私有成员(成员变量、成员方法)。
- 子类的对象是由子类和父类共同完成的。
代码案例:
class Person {private String name;private int age;public void setName(String name){this.name=name;}public String getName(){return name;}public void setAge(int age){this.age=age;}public int getAge(){return age;}
}class Student extends Person{
}class Test{public static void main(String[] args){Student stu =new Student();stu.setName("张三");stu.setAge("18");System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge());}
}
运行结果:
姓名:张三,年龄:18
可见,通过继承的功能可以直接将父类中的操作拿到子类中使用,即使子类中没有定义任何操作。
当然,子类也可以定义自己的属性和方法,可以通过子类扩展父类的功能,例如:
class Student extends Person{private String school;public void setSchool(String school){this.school=school;}public String getSchool(){return school;}
}
这样,主方法中也能
setSchool()
和getSchool()
方法。
🌟权限修饰符
💯private 修饰符
- 访问权限:只能在定义它的类内部被访问。
- 使用场景:常用于隐藏类的内部数据和实现细节,防止外部直接访问和修改,保证数据的安全性和封装性。
- 示例代码:
class PrivateExample {// 私有成员变量private int privateVariable = 10;// 私有方法private void privateMethod() {System.out.println("This is a private method.");}public void accessPrivateMembers() {// 可以在类内部访问私有成员System.out.println(privateVariable);privateMethod();}
}public class Main {public static void main(String[] args) {PrivateExample example = new PrivateExample();// 以下代码会报错,因为不能在类外部访问私有成员// System.out.println(example.privateVariable); // example.privateMethod(); example.accessPrivateMembers();}
}
💯默认(无修饰符)
- 访问权限:也称为包访问权限,只能被同一个包中的类访问。
- 使用场景:当你希望某些类、方法或变量仅在同一个包内可见时使用,有助于组织和管理代码,将相关的类放在同一个包中并相互访问。
- 示例代码:
// 假设在 com.example 包下
package com.example;class DefaultExample {// 默认成员变量int defaultVariable = 20;// 默认方法void defaultMethod() {System.out.println("This is a default method.");}
}// 同一个包中的另一个类
class AnotherClassInSamePackage {public static void main(String[] args) {DefaultExample example = new DefaultExample();// 可以在同一个包中访问默认成员System.out.println(example.defaultVariable);example.defaultMethod();}
}
💯protected 修饰符
- 访问权限:可以被同一个包中的类访问,也可以被不同包中的子类访问。
- 使用场景:当你希望某个类的成员不仅能在同一个包中被访问,还能被不同包的子类继承和使用时使用。
- 示例代码:
// 假设在 com.parent 包下
package com.parent;public class ParentClass {// 受保护的成员变量protected int protectedVariable = 30;// 受保护的方法protected void protectedMethod() {System.out.println("This is a protected method.");}
}// 假设在 com.child 包下
package com.child;import com.parent.ParentClass;class ChildClass extends ParentClass {public void accessProtectedMembers() {// 可以在不同包的子类中访问受保护成员System.out.println(protectedVariable);protectedMethod();}
}public class Main {public static void main(String[] args) {ChildClass child = new ChildClass();child.accessProtectedMembers();}
}
💯public 修饰符
- 访问权限:可以被任何类访问,无论这些类是否在同一个包中,也无论它们是否存在继承关系。
- 使用场景:常用于定义公共的 API,如公共类、公共方法和公共常量等,方便其他类使用。
- 示例代码:
// 假设在 com.publicapi 包下
package com.publicapi;public class PublicExample {// 公共成员变量public int publicVariable = 40;// 公共方法public void publicMethod() {System.out.println("This is a public method.");}
}// 可以在任何包中的类中访问公共成员
public class Main {public static void main(String[] args) {PublicExample example = new PublicExample();System.out.println(example.publicVariable);example.publicMethod();}
}
💯归纳
权限修饰符 | 本类 | 同一个包中的类 | 不同包中的子类 | 不同包中的非子类 |
---|---|---|---|---|
private | 可以访问 | 不可访问 | 不可访问 | 不可访问 |
默认(无修饰符) | 可以访问 | 可以访问 | 不可访问 | 不可访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不可访问 |
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
🦜继承的特点
💯单继承
java只允许单继承,不能使用多重继承,即一个子类只能继承一个父类;也允许多层继承,即一个子类可以继承一个父类,这个父类也可以继承一个父类。
- 错误代码:
class A{}
class B{}
class C extends A,B{} //同时继承两个类,代码错误
- 多层继承:
class A{}
class B extends A{}
class C extends B{}
💯Object类
在 Java 里,Object
类是所有类的父类,即每个类都直接或间接地继承自 Object
类。这意味着 Java 中的任何对象都能调用 Object
类所定义的方法。
- 顶级父类:作为 Java 类层次结构的顶端,所有类默认继承它,无需显式声明。
- 多态基础:由于所有类都继承自
Object
类,所以可以将任何对象赋值给Object
类型的变量,为多态性提供了基础。
💯就近原则
在子类方法中访问其它成员,是依照就近原则的。
- 先子类局部范围找,然后子类成员范围找,然后父类成员范围找,如果都未找到就报错。
注意:如果子父类中,出现了重名成员,会优先使用子类的。如果想要在子类中使用父类的,就需要用到super
关键字。
格式如下:
super.父类成员变量/父类成员方法
代码示例如下:
public class Test {public static void main(String[] args) {Zi zi=new Zi();zi.show();}
}
class Fu {String name="父类的name";public void run(){System.out.println("父类的run方法");}
}
class Zi extends Fu{String name="子类的name";public void show(){String name="show的name";System.out.println(name);//show的nameSystem.out.println(this.name);//子类的nameSystem.out.println(super.name);//父类的namesuper.run();//父类的run方法run();//子类的run方法}public void run(){System.out.println("子类的run方法");}}
运行结果:
show的name
子类的name
父类的name
父类的run方法
子类的run方法
✍️方法重写
当子类觉得父类中的某一个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写(声明不变,重新实现)。
- 代码示例:
public class Test {public static void main(String[] args) {Cat cat = new Cat();cat.eat();}
}class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼");}
}class Animal {public void eat() {System.out.println("动物吃东西");}
}
- 运行结果:
猫吃鱼
这段代码中,子类
Cat
继承父类Animal
,子类中的eat
方法重写了父类中的eat
方法,所以输出结果为子类方法中的内容。
💯@Override
在 Java 里,@Override
属于注解,其用途是告知编译器,我们打算对父类中的一个方法进行重写。
用途:
- 编译器检查:借助 @Override 注解,编译器会核查该方法是否确实重写了父类的方法。若没有重写,编译器就会报错,这样能避免因拼写错误或者方法签名不匹配引发的潜在问题。
- 增强代码可读性:明确表明这个方法是对父类方法的重写,使代码的意图更加清晰。
💯方法重写的注意事项
- 子类重写父类方法时,访问权限必须大于或等于父类该方法的权限。(public>protected>默认)
- 重写的方法返回值类型必须与被重写方法的返回值类型一样,或者范围更小。
- 私有方法、静态方法不能被重写,如果重写会报错。
💯toString方法重写
在 Java 中,toString
方法是 Object
类中的一个方法,所有类都继承自 Object
类,因此都拥有 toString
方法。toString
方法的主要作用是返回对象的字符串表示形式。默认情况下,toString
方法返回的是对象的类名和哈希码,这通常对开发者和用户来说没有太大的实际意义。所以,我们经常会重写 toString
方法,以提供更有意义的对象信息。
注意:
- 直接输出对象,默认会调用
Object
类的toString
方法(可以省略不写toString
的方法)。
以下是一个重写 toString
方法的示例代码,我会为其添加详细的注释并进行简单说明:
// 定义一个名为 Person 的类,用于表示一个人的信息
class Person {// 定义两个私有属性,分别表示人的姓名和年龄private String name;private int age;// 构造函数,用于初始化 Person 对象的姓名和年龄public Person(String name, int age) {// 使用 this 关键字来区分成员变量和局部变量this.name = name;this.age = age;}// 重写 Object 类的 toString 方法,以提供更有意义的对象信息@Overridepublic String toString() {// 返回一个包含姓名和年龄信息的字符串return "Person{name='" + name + "', age=" + age + "}";}
}public class Test {public static void main(String[] args) {// 创建一个 Person 对象,并传入姓名和年龄Person person = new Person("Alice", 25);// 调用 person 对象的 toString 方法,并将结果打印输出System.out.println(person); }
}
代码说明:
- 类的定义:定义了一个名为
Person
的类,该类有两个私有属性name
和age
,分别表示人的姓名和年龄。 - 构造函数:
Person
类的构造函数用于初始化name
和age
属性。 - 重写
toString
方法:在Person
类中重写了toString
方法,使用@Override
注解告诉编译器这是一个重写的方法。重写后的toString
方法返回一个包含name
和age
信息的字符串。 - 主方法:在
Test
类的main
方法中,创建了一个Person
对象,并调用其toString
方法将结果打印输出。由于System.out.println
方法会自动调用对象的toString
方法,所以可以直接传入person
对象。
通过重写
toString
方法,我们可以方便地获取对象的详细信息,这在调试和日志记录中非常有用。
补充:
- Object 类中
toString
方法的源码如下:
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
🐧子类构造器的特点
- 子类中的全部构造器,都必须先调用父类的构造器,再执行自己。
- 使用
super(...)
可以调用父类有参数构造器,为对象中包含父类这部分的成员变量进行赋值。
public class Test {public static void main(String[] args) {Zi z = new Zi();}
}
class Zi extends Fu {public Zi() {super(666);//指定调用父类的有参构造器System.out.println("子类构造器");}
}class Fu{public Fu() {System.out.println("父类构造器");}public Fu(int a) {System.out.println("父类有参构造器");}
}
运行结果:
父类有参构造器
子类构造器
注意:super关键字必须写在首行。
💯this与super的区别
比较项 | this | super |
---|---|---|
基本含义 | 指代当前对象的引用,即调用方法或构造器的对象本身 | 代表父类(直接超类)的引用,用于访问父类中被覆盖的成员或构造器 |
主要作用 | 1. 区分成员变量与局部变量(两者同名时);2. 在构造器中调用同一类的其他构造器(需为构造器首行);3. 在方法中引用当前对象 | 1. 在子类构造器中调用父类的构造器(需为子类构造方法首行);2. 访问父类中被覆盖的成员变量或方法(子类重写父类成员时) |
使用限制 | 1. 不能在静态方法或静态代码块中使用;2. 构造器中调用其他构造方法时,只能出现一次且必须为第一行 | 1. 子类构造器若未显式调用 super() ,编译器会自动插入无参的父类构造器(若父类存在无参构造器);2. 若父类没有无参构造器,子类必须显式调用父类的有参构造器(通过 super(参数) ) |
本质区别 | 操作当前类的成员(包括从父类继承的成员) | 操作父类的成员(即使子类重写了父类成员,也能通过 super 访问父类的版本) |
适用场景 | 访问当前对象成员或构造器 | 访问父类成员或构造器 |
相关文章:
java面向对象编程【高级篇】之继承
目录 🚀前言🤔什么是继承?🌟权限修饰符💯private 修饰符💯默认(无修饰符)💯protected 修饰符💯public 修饰符💯归纳 🦜继承的特点&…...
【数论分块】数论分块算法模板及真题
1.数论分块的含义 数论分块算法,就是枚举出使得取整函数发生变化的地方。 例如,对表达式 ⌊ n i ⌋ \lfloor \frac{n}{i} \rfloor ⌊in⌋使用数论分块算法,就可以在 O ( n ) O(\sqrt n) O(n )的时间复杂度下枚举所有满足 ⌊ n i − 1 ⌋…...
DIY 3D打印机 原理及步骤概况
一、3D打印机的基本原理 硬件组成: 运动系统:控制X/Y/Z轴的步进电机(或直线电机),决定打印头的移动精度。 热端(挤出机):加热并挤出材料(如PLA、ABS塑料)。 …...
深度探索:DeepSeek赋能WPS图表绘制
一、研究背景 在当今数字化信息爆炸的时代,数据处理与可视化分析已成为众多领域研究和决策的关键环节。随着数据量的急剧增长和数据维度的不断丰富,传统的数据可视化工具在应对复杂数据时逐渐显露出局限性。Excel作为广泛应用的电子表格软件,…...
内存四区(栈)
今天我再次学到了有趣的知识,内存四区! 内存四区分为代码区,全局区,栈区,堆区,今天我们详细来讲讲栈区! 内存四区和栈区都是用来存放数据的,而栈区存放的数据具体有两类 1.形参数…...
Nginx性能优化:从配置到缓存,全面提升Web服务器性能
一、基础配置优化:释放硬件潜能 进程与连接调优 worker_processes: 推荐设置为 auto(自动匹配CPU核心数),但在特殊场景下需手动优化:worker_processes 8; # 8核CPU手动指定 worker_cpu_affinity 000…...
系统架构设计(三):质量属性
常见分类 一般来说,质量属性可以分为以下几类: 类别常见质量属性性能相关响应时间、吞吐量、资源利用率、实时性、可扩展性可用性相关可用性、高可用性(HA)、可靠性、容错性、恢复性可维护性相关可维护性、可测试性、可扩展性、…...
C#中常见的设计模式
文章目录 引言设计模式的分类创建型模式 (Creational Patterns)1. 单例模式 (Singleton)2. 工厂方法模式 (Factory Method)3. 抽象工厂模式 (Abstract Factory)4. 建造者模式 (Builder) 结构型模式 (Structural Patterns)5. 适配器模式 (Adapter)6. 装饰器模式 (Decorator)7. 外…...
C# 枚举(Enum)声明与使用详解
在 C# 编程中,枚举(Enum)是一种非常实用的数据类型,它允许你定义一组具有名称的整型常量,使代码更具可读性和可维护性。枚举可以有效地替代使用硬编码数值,尤其是在处理状态、选项或标志时。本文将深入探讨…...
Linux-进程控制
目录 一、进程创建 1.1、fork()函数 1.2、fork的返回值 1.3、写实拷贝(Copy-on-Write,COW) 1.4、fork常规用法 1.5、fork调用失败的原因 二、进程退出 三、进程等待 1、wait和waitpid 1.1、解决僵尸进程问题 1.2、status参数 程序正…...
【优选算法 | 滑动窗口】滑动窗口算法:高效处理子数组和子串问题
算法相关知识点可以通过点击以下链接进行学习一起加油!双指针 在本篇文章中,我们将深入剖析滑动窗口算法的核心原理。从基础概念到实战应用,带你了解如何利用滑动窗口高效解决连续子数组和子串等问题。无论你是算法入门的新手,还是…...
RabbitMQ全栈实践手册:从零搭建消息中间件到SpringAMQP高阶玩法
目录 前言 认识MQ 同步调用 异步调用 技术选型 安装 SpringAMQP 交换机类型 队列交换机绑定 环境搭建 Fanout交换机 声明队列和交换机 消息发送 消息接收 总结 Direct交换机 声明队列和交换机 消息发送 消息接收 总结 Topic交换机 声明队列和交换机 消息…...
头歌实训之存储过程、函数与触发器
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
系统架构设计中的DSSA方法:理论、实践与行业深度应用
引言 在软件架构设计领域,DSSA(Domain-Specific Software Architecture,领域特定软件架构)是一种专注于垂直行业或业务领域的架构设计方法论。与通用架构设计不同,DSSA通过提炼领域共性需求、构建可复用资产库&am…...
设计心得——数据结构的意义
一、数据结构 在老一些的程序员中,可能都听说过,程序其实就是数据结构算法这种说法。它是由尼克劳斯维特在其著作《算法数据结构程序》中提出的,然后在一段时期内这种说法非常流行。这里不谈论其是否正确,只是通过这种提法&#…...
【C】初阶数据结构12 -- 冒泡排序
本篇文章主要讲解经典排序算法 -- 冒泡排序。 目录 1 算法思想 2 代码 3 时间复杂度与空间复杂度分析 1) 时间复杂度 2) 空间复杂度 1 算法思想 选择排序是一种经典的交换排序算法。其算法思想也比较简单,主要是比较相邻元素&…...
HTTP, AMQP, MQTT之间的区别和联系是什么?华为云如何适配?
目录 🔗 一、共同点(联系): 🔍 二、区别对比: 📘 三、简要说明 1. HTTP 2. AMQP 3. MQTT 🔗 四、三者联系(在华为云IoT平台中的应用) 🎯 …...
WPF之项目创建
文章目录 引言先决条件创建 WPF 项目步骤理解项目结构XAML 与 C# 代码隐藏第一个 "Hello, WPF!" 示例构建和运行应用程序总结相关学习资源 引言 Windows Presentation Foundation (WPF) 是 Microsoft 用于构建具有丰富用户界面的 Windows 桌面应用程序的现代框架。它…...
CrewAI Community Version(二)——Agent
目录 1. Agent总览2. Agent属性3. 创建Agent3.1 YAML配置3.2 直接用代码定义3.3 运行结果 参考 1. Agent总览 在CrewAI框架中,Agent是一个能具备下列能力的自主单元: 1. 执行特定的任务 2. 基于它的角色和目标进行决策 3. 使用工具完成任务 …...
阿里云VS AWS中国区:ICP备案全攻略与常见误区解析
导语 在中国大陆开展互联网服务时,ICP备案是必不可少的合规步骤。然而,随着云服务的多样化,许多企业在选择备案路径时常常感到困惑。本文将深入解析阿里云和AWS中国区的备案区别,为您提供清晰的操作指南,助您避开备案陷阱,确保业务合规运营。 一、备案基本原则 1. 服务器决定…...
基于libdxfrw库读取样条曲线并离散为点
在计算机辅助设计(CAD)与制造(CAM)领域,DXF(Drawing Exchange Format)格式文件被广泛用于存储与交换矢量图形信息。样条曲线作为DXF文件中常见的复杂曲线类型,其准确读取与离散化处理…...
学习 Apache Kafka
学习 Apache Kafka 是一个很好的选择,尤其是在实时数据流处理和大数据领域。以下是一个系统化的学习建议,帮助你从入门到进阶掌握 Kafka: 1. 先决条件 在开始 Kafka 之前,确保你具备以下基础: Java 基础:K…...
5.3/Q1,GBD数据库最新文章解读
文章题目:The burden and trend prediction of ischemic heart disease associated with lead exposure: Insights from the Global Burden of Disease study 2021 DOI:10.1186/s12940-025-01155-w 中文标题:与铅暴露相关的缺血性心脏病的负担…...
java智慧城管综合管理系统源码,前端框架:vue+element;后端框架:springboot;移动端:uniapp开发,技术前沿,可扩展性强
智慧城管综合执法系统采用B/S模式设计与手机等移动终端架构,采用 java编程语言前端框架:vueelement;后端框架:springboot;数据库:mysql5.7;移动端:uniapp技术开发设计。具有使用与维…...
【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码)
目录 效果一览程序获取程序内容代码分享研究内容GRU门控循环单元在锂电池剩余寿命预测中的应用摘要关键词1. 引言1.1 研究背景1.2 研究现状与问题1.3 研究目的与意义2. 文献综述2.1 锂电池剩余寿命预测传统方法2.2 深度学习在锂电池寿命预测中的应用2.3 研究空白与本文切入点3.…...
开发首个Spring Boot应用
📋 前置条件 🎯 在开始之前,请打开终端并运行以下命令以确保已安装正确版本的 Java: $ java -version openjdk version "17.0.4.1" 2022-08-12 LTS OpenJDK Runtime Environment (build 17.0.4.11-LTS) OpenJDK 64-Bi…...
2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup 2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup情报收集黑客密室逃脱 数据分析ezEvtxflowzip 密码破解EnigmaECBTraineasy_AES 逆向分析ShadowPhases 漏洞挖掘分析RuneBrea…...
HTTP 协议深度解析:从基础到实战的完整指南
HTTP(HyperText Transfer Protocol)是 应用层协议,用于客户端(浏览器、APP)与服务器之间的数据交互。以下从协议原理、核心机制到实际案例全面解析,涵盖 HTTP/1.1 到 HTTP/3 的演进。 一、HTTP 核心特性 …...
5G助力智慧城市的崛起——从概念到落地的技术实践
5G助力智慧城市的崛起——从概念到落地的技术实践 引言:智慧城市中的“隐形脉络” 随着城市化的快速推进,传统的城市管理方式已经难以满足人口增长和资源优化的需求。智慧城市的概念应运而生,通过技术创新实现智能化、可持续发展的城市生态…...
4.25test
R7-5 小黄与研究生会(20) 分数 12 全屏浏览 切换布局 作者 王秀 单位 福州大学 福州大学研究生院怡山的同学们为了在国家对抗新冠疫情期间献出自己的一份力量,他们决定为奋战在一线的医护人员送去了演出。小黄作为研究生协会的会长,他让每位男同学均带去了若干只猫或狗…...
Unity-Shader详解-其一
今天我们来介绍Unity的一大核心组件:shader。 Shader Shader就是我们的着色器,用于控制图形的渲染的计算和生成。 对于不同的引擎,具体实现渲染的方法也不一样,也就是我们俗称的不同的图形引擎API,比如OpenGL,Direct…...
WPF与C++ 动态库交互
WPF与C++动态库交互技术详解 一、基本交互方式概述 WPF应用程序与C++动态库交互主要有以下几种方式: P/Invoke调用(平台调用)COM互操作C++/CLI桥接层内存映射文件命名管道/Socket通信本文将重点介绍最常用的P/Invoke和C++/CLI两种…...
自动化测试实战篇
文章目录 目录1. 自动化实施步骤1.1 编写web测试用例1.2 自动化测试脚本开发1.3 测试报告 目录 自动化实施步骤 1. 自动化实施步骤 1.1 编写web测试用例 注: 因为这里仅作为演示,所以设计的用例并不是非常完整 1.2 自动化测试脚本开发 # common/Util…...
基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)
这里写目录标题 开发目标准备工作源代码程序打包其他事项命令行使用pandoc关于pandoc默认表格无边框的说明 开发目标 采用word格式模板,实现高级定制样式。具备配置保存功能,方便快捷。自定义转换选项、pandoc路径。 准备工作 开发环境:Wi…...
JVM知识点(一)---内存管理
一、JVM概念 什么是JVM? 定义: Java Virtual Machine - java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界越界检查多态 比较jvm jre jdk区别 学习路…...
Apache NetBeans 25 发布
Apache NetBeans 25 已于 2025 年 2 月 20 日发布3。NetBeans 是一个主要面向 Java 的集成开发环境,同时支持 C/C、PHP、JavaScript 和其他编程语言1。以下是一些主要的更新内容: Gradle 的优化与增强:优化单文件测试功能,即使测试…...
【设计模式区别】装饰器模式和适配器模式区别
装饰器模式(Decorator Pattern)和适配器模式(Adapter Pattern)都是 结构型设计模式 或者说 包装模式 (Wrapper),用于解决对象的组合和扩展问题,但它们的核心目的、结构和使用场景有显…...
矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理
一、特殊材料矫平:挑战与创新解决方案 1. 高温合金(如Inconel 718)处理 技术难点: 屈服强度高达1100 MPa,传统矫平力不足 高温下易氧化,需惰性气体保护环境 解决方案: 采用双伺服电机驱动&a…...
stm32进入睡眠模式的几个注意点
(1)关闭systick (2)先关闭外设时钟,再屏蔽中断,避免先屏蔽中断再关闭外设时钟导致中断挂起无法进入睡眠模式(立即被唤醒)。 参考: 注:图片截自《RM0433参考手…...
深入理解网络安全中的加密技术
1 引言 在当今数字化的世界中,网络安全已经成为个人隐私保护、企业数据安全乃至国家安全的重要组成部分。随着网络攻击的复杂性和频率不断增加,保护敏感信息不被未授权访问变得尤为关键。加密技术作为保障信息安全的核心手段,通过将信息转换为…...
学习设计模式《六》——抽象工厂方法模式
一、基础概念 抽象工厂模式的本质是【选择产品簇(系列)的实现】; 抽象工厂模式定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类; 抽象工厂模式功能:抽象工厂的功能是为一系列相关对象或相互依…...
MySQL 数据类型
文章目录 数据类型数据类型分类数据类型tinyint类型(整型)总结bit类型(字节) 浮点类型float类型decimal类型 字符串类型char类型varchar(变长字符串) char 和 varchar的对比日期类型enum和set类型ÿ…...
基于Tcp协议的应用层协议定制
前言:本文默认读者已掌握 TCP 协议相关网络接口知识,将聚焦于应用层协议的设计与剖析,有关底层通信机制及业务逻辑部分仅作简要概述,不再展开详述。 目录 服务器 一、通信 二、协议 1.序列化与反序列化 2. 封包与解包 三、业…...
Flink反压问题解析
一、什么是反压(Backpressure)? 反压(Backpressure) 是流处理系统中的一种流量控制机制。当下游算子处理速度低于上游数据生产速度时,系统会向上游传递压力信号,迫使上游降低数据发送速率,避免数据堆积和系统崩溃。 Flink 通过动态反压机制实现这一过程,但其副作用是…...
C语言中结构体的字节对齐的应用
一、字节对齐的基本原理 计算机的内存访问通常以固定大小的块(如 4 字节、8 字节)为单位。若数据的内存地址是块大小的整数倍,称为 自然对齐。例如: int(4 字节)的地址应为 4 的倍数。 double(…...
大规模数据同步后数据总条数对不上的系统性解决方案:从字段映射到全链路一致性保障
一、引言 在数据同步(如系统重构、分库分表、多源整合)场景中,“本地数据一致,生产环境条数对不上”是典型痛点。问题常源于并发处理失控、数据库性能瓶颈、字段映射错误、缓存脏数据等多维度缺陷。本文结合实战经验,…...
美团Java后端二面面经!
场景题是面试的大头,建议好好准备 Q. [美团]如何设计一个外卖订单的并发扣减库存系统? Q.[美团]为啥初始标记和重新标记需要STW? Q.[美团]骑手位置实时更新,如何保证高并发写入? Q.[美团]订单表数据量过大导致查询…...
35-疫苗预约管理系统(微服务)
技术: RuoYi框架 后端: SpringBootMySQLspringCloudnacosRedis 前端: vue3 环境: Idea mysql maven jdk1.8 用户端功能 1.首页:展示疫苗接种须知标语、快速预约模块 2.疫苗列表:展示可接种的疫苗 3.预约接种: 用户可进行疫苗预约接种 修改预约时间 …...
Ext JS模拟后端数据之SimManager
Ext.ux.ajax.SimManager 是 Ext JS 框架中用于拦截 Ajax 请求并返回模拟数据的核心工具,适用于前后端分离开发、原型验证或独立测试场景。它通过配置灵活的规则和模拟处理器(Simlet),帮助开发者在不依赖真实后端的情况下完成前端功能开发。 simlets 是simulated servers的…...
BT169-ASEMI无人机专用功率器件BT169
编辑:ll BT169-ASEMI无人机专用功率器件BT169 型号:BT169 品牌:ASEMI 封装:SOT-23 批号:最新 引脚数量:3 特性:单向可控硅 工作温度:-40℃~150℃ BT169单向可控硅ÿ…...