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

第6篇:Java面向对象进阶:继承、重写与多态,解锁代码复用新姿势

上一篇我们掌握了Java面向对象基础学会了定义类、创建对象用封装保护数据安全用构造方法简化对象初始化完成了面向对象版的学生成绩管理案例。但在实际开发中我们会遇到“多个类拥有相同属性和方法”的场景——比如“学生类”“老师类”“管理员类”都拥有“姓名、年龄”等属性和“展示信息”等方法如果每个类都重复定义这些相同的内容会导致代码冗余、维护困难。而Java面向对象的三大特性封装、继承、多态中继承正是为解决“代码复用”而生方法重写让子类能个性化扩展父类功能多态则让代码更具灵活性和扩展性三者相辅相成是Java进阶的核心也是面试高频考点。本篇文章将从基础入手手把手教你理解继承的概念、用法与优势掌握方法重载与重写的区别吃透多态的实现条件与应用场景拆解新手高频易错点结合实战案例让你彻底掌握面向对象进阶技巧编写更简洁、更具扩展性的代码。核心目标理解继承的本质与作用掌握继承的定义与使用能区分方法重载与重写理解多态的核心原理与实现条件熟练运用继承、重写、多态完成实战案例规避常见坑掌握相关面试考点为后续学习接口、抽象类筑牢基础。一、前置认知为什么需要继承解决代码冗余问题在学习继承之前我们先看一个场景定义“学生类Student”和“老师类Teacher”两个类的代码如下// 学生类 public class Student { // 成员变量 private String name; private int age; // 构造方法 public Student() {} public Student(String name, int age) { this.name name; this.age age; } // 成员方法 public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } // 展示信息 public void showInfo() { System.out.println(姓名 name 年龄 age); } // 学生特有方法 public void study() { System.out.println(name 正在学习); } } // 老师类 public class Teacher { // 成员变量和Student类完全相同 private String name; private int age; // 构造方法和Student类完全相同 public Teacher() {} public Teacher(String name, int age) { this.name name; this.age age; } // 成员方法和Student类完全相同 public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } // 展示信息和Student类完全相同 public void showInfo() { System.out.println(姓名 name 年龄 age); } // 老师特有方法 public void teach() { System.out.println(name 正在授课); } }观察代码不难发现Student类和Teacher类有大量重复代码成员变量、构造方法、showInfo方法这就是“代码冗余”。如果后续还要定义“管理员类”“辅导员类”会重复编写更多相同代码不仅开发效率低后续修改时比如修改showInfo方法的格式还需要修改所有类的代码维护成本极高。而继承就能完美解决这个问题我们可以提取多个类的“共性内容”定义一个“父类”比如“Person类”将相同的属性和方法放在父类中然后让Student类、Teacher类“继承”父类这样子类就会自动拥有父类的所有属性和方法无需重复定义只需编写子类特有的属性和方法即可。核心结论继承的核心作用是代码复用减少冗余代码提高开发效率同时让类与类之间产生关联为后续多态的实现奠定基础。二、核心知识点继承Inheritance的定义与使用继承是面向对象的三大特性之一本质是“子类继承父类的属性和方法”子类可以直接使用父类中非private修饰的属性和方法同时可以定义自己特有的属性和方法实现功能的扩展。类比理解儿子继承父亲的财产相当于子类继承父类的属性和方法同时儿子可以有自己的财产和技能相当于子类特有的属性和方法。2.1 继承的核心概念父类超类、基类提取多个子类的共性内容是子类的“模板”比如上面的Person类子类派生类继承父类的属性和方法同时可以扩展自己的特有功能比如Student类、Teacher类继承关系子类与父类之间是“is a”的关系子类是父类的一种比如Student is a Person学生是人的一种Teacher is a Person老师是人的一种。2.2 继承的定义格式固定写法必须掌握Java中用extends关键字实现继承格式如下// 父类定义普通类 public class 父类名 { // 共性属性和方法 } // 子类定义继承父类 public class 子类名 extends 父类名 { // 子类特有属性和方法可选 }关键说明Java只支持单继承一个子类只能继承一个父类不支持多继承比如子类不能同时继承Person和Animal但支持多层继承比如Student继承PersonPrimaryStudent继承Student子类会继承父类中所有非private修饰的属性和方法private修饰的属性和方法子类无法直接访问需通过父类的getter/setter方法访问子类不能继承父类的构造方法但可以通过super关键字调用父类的构造方法后续讲解。2.3 继承实战案例解决代码冗余提取Person类作为父类封装共性属性和方法让Student类、Teacher类继承Person类简化代码// 父类Person类共性内容 public class Person { // 共性成员变量private修饰通过getter/setter访问 private String name; private int age; // 共性构造方法 public Person() {} public Person(String name, int age) { this.name name; this.age age; } // 共性getter/setter方法 public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } // 共性方法展示信息 public void showInfo() { System.out.println(姓名 name 年龄 age); } } // 子类Student类继承Person类 public class Student extends Person { // 子类特有属性可选 private double score; // 子类构造方法需调用父类构造方法 public Student() {} // 有参构造调用父类的有参构造初始化共性属性再初始化子类特有属性 public Student(String name, int age, double score) { super(name, age); // super关键字调用父类的有参构造方法 this.score score; } // 子类特有getter/setter方法 public double getScore() { return score; } public void setScore(double score) { this.score score; } // 子类特有方法 public void study() { // 子类可以调用父类的非private方法showInfo showInfo(); System.out.println(getName() 正在学习成绩 score); } } // 子类Teacher类继承Person类 public class Teacher extends Person { // 子类特有属性 private double salary; // 子类构造方法 public Teacher() {} public Teacher(String name, int age, double salary) { super(name, age); // 调用父类有参构造 this.salary salary; } // 子类特有getter/setter方法 public double getSalary() { return salary; } public void setSalary(double salary) { this.salary salary; } // 子类特有方法 public void teach() { showInfo(); System.out.println(getName() 正在授课月薪 salary 元); } } // 测试类 public class InheritanceTest { public static void main(String[] args) { // 创建Student对象 Student student new Student(张三, 18, 90.5); // 调用父类的方法showInfo student.showInfo(); // 调用子类的特有方法 student.study(); System.out.println(-------------------); // 创建Teacher对象 Teacher teacher new Teacher(李老师, 35, 8000); teacher.showInfo(); teacher.teach(); // 调用父类的getter方法 System.out.println(老师姓名 teacher.getName()); // 调用子类的getter方法 System.out.println(老师月薪 teacher.getSalary()); } }运行结果姓名张三年龄18 姓名张三年龄18 张三正在学习成绩90.5 ------------------- 姓名李老师年龄35 姓名李老师年龄35 李老师正在授课月薪8000.0元 老师姓名李老师 老师月薪8000.0核心优势通过继承Student类和Teacher类无需重复定义name、age属性和showInfo方法只需编写特有属性和方法代码冗余大幅减少后续修改共性内容比如修改showInfo方法只需修改父类代码所有子类都会同步生效维护成本大大降低。2.4 继承中的super关键字重点super关键字的核心作用是“访问父类的成员”主要用于3种场景是继承中不可或缺的关键字1调用父类的构造方法子类的构造方法中默认会隐含调用父类的无参构造方法super();如果父类没有无参构造方法手动定义了有参构造则必须手动用super()调用父类的有参构造方法否则会报错。关键规则super()必须写在子类构造方法的第一行否则报错且只能出现一次。// 父类只有有参构造无无参构造 public class Person { private String name; private int age; // 手动定义有参构造Java不再提供默认无参构造 public Person(String name, int age) { this.name name; this.age age; } } // 子类必须手动调用父类的有参构造 public class Student extends Person { private double score; // 错误未调用父类有参构造报错 // public Student(String name, int age, double score) { // this.score score; // } // 正确手动调用父类有参构造super()写在第一行 public Student(String name, int age, double score) { super(name, age); // 调用父类有参构造初始化name和age this.score score; } }2调用父类的成员方法当子类的方法与父类的方法重名时方法重写用super.方法名()调用父类的方法区分子类和父类的同名方法。public class Person { public void showInfo() { System.out.println(我是父类的showInfo方法); } } public class Student extends Person { // 方法重写子类方法与父类方法同名 Override public void showInfo() { super.showInfo(); // 调用父类的showInfo方法 System.out.println(我是子类的showInfo方法); } }3调用父类的成员变量当子类的成员变量与父类的成员变量重名时用super.成员变量名访问父类的成员变量类似this关键字的用法。public class Person { protected String name 父类姓名; // protected修饰子类可直接访问 } public class Student extends Person { private String name 子类姓名; public void showName() { System.out.println(父类姓名 super.name); // 访问父类成员变量 System.out.println(子类姓名 this.name); // 访问子类成员变量 } }2.5 .继承的常见易错点新手必看​Java支持多继承错误Java只支持单继承一个子类只能继承一个父类​子类继承父类的构造方法错误子类不能继承父类的构造方法只能通过super关键字调用​super()的位置错误super()必须写在子类构造方法的第一行否则报错​父类有参构造未手动调用父类手动定义有参构造后子类未用super()调用导致报错​子类访问父类private成员试图直接访问父类private修饰的属性/方法导致报错需通过父类getter/setter访问。​三、易混淆知识点方法重载Overloadvs 方法重写Override​方法重载和方法重写是Java中两个极易混淆的概念二者都涉及“方法同名”但作用、实现条件完全不同是新手高频易错点也是面试高频考点必须严格区分。​3.1 方法重载Overload同一类中的“同名不同参”​方法重载的核心是“在同一个类中定义多个同名方法但参数列表不同”用于实现“同一功能的不同实现方式”比如求和可实现两个int求和、两个double求和。​方法重载的实现条件必须同时满足​方法名必须完全相同大小写一致​参数列表必须不同至少满足以下一种​​参数个数不同比如sum(int a) 和 sum(int a, int b)​参数类型不同比如sum(int a, int b) 和 sum(double a, double b)​参数顺序不同比如sum(int a, double b) 和 sum(double a, int b)​返回值类型、访问权限可以不同不影响重载。​方法重载实战案例public class Calculator { // 方法1两个int求和 public int sum(int a, int b) { return a b; } // 方法2三个int求和参数个数不同重载 public int sum(int a, int b, int c) { return a b c; } // 方法3两个double求和参数类型不同重载 public double sum(double a, double b) { return a b; } // 方法4int和double求和参数顺序不同重载 public double sum(int a, double b) { return a b; } // 错误参数列表相同仅返回值不同不是重载报错 // public double sum(int a, int b) { // return a b; // } public static void main(String[] args) { Calculator calc new Calculator(); System.out.println(calc.sum(10, 20)); // 调用sum(int, int) System.out.println(calc.sum(10, 20, 30)); // 调用sum(int, int, int) System.out.println(calc.sum(10.5, 20.5)); // 调用sum(double, double) System.out.println(calc.sum(10, 20.5)); // 调用sum(int, double) } }3.2 方法重写Override子类与父类的“同名同参”方法重写的核心是“子类继承父类后定义与父类同名、同参数列表的方法”用于“修改或扩展父类方法的功能”比如父类showInfo方法展示基础信息子类重写后展示更多信息。方法重写也叫“方法覆盖”必须满足“子类方法与父类方法完全匹配”除了方法体。方法重写的实现条件必须同时满足面试重点方法名必须完全相同大小写一致参数列表必须完全相同参数个数、类型、顺序都相同返回值类型子类方法的返回值类型必须小于等于父类方法的返回值类型新手可简单记“相同或子类”访问权限子类方法的访问权限必须大于等于父类方法的访问权限比如父类方法是protected子类方法可以是protected或public不能是private父类方法不能是private修饰private修饰的方法子类无法继承无法重写子类方法不能添加static关键字父类方法是static子类方法也必须是static这不是重写是静态方法的隐藏。关键提醒重写方法时建议添加Override注解注解用于标记重写方法IDE会自动检查重写条件是否满足避免写错。方法重写实战案例// 父类Person public class Person { protected void showInfo() { System.out.println(父类姓名 getName() 年龄 getAge()); } // private方法子类无法重写 private void eat() { System.out.println(父类吃饭); } // static方法子类不能重写只能隐藏 public static void sleep() { System.out.println(父类睡觉); } // getter方法省略setter public String getName() { return 未知姓名; } public int getAge() { return 0; } } // 子类Student重写父类方法 public class Student extends Person { private double score; // 重写父类的showInfo方法Override注解标记 Override protected void showInfo() { // 调用父类的showInfo方法保留父类功能 super.showInfo(); // 扩展子类特有功能 System.out.println(子类学生成绩 score); } // 错误父类eat()是private无法重写报错 // Override // private void eat() { // System.out.println(子类吃饭); // } // 不是重写父类sleep()是static子类也写static是静态方法隐藏 public static void sleep() { System.out.println(子类睡觉); } // 重写父类的getName方法返回值类型相同 Override public String getName() { return 张三; } // setter/getter省略 public double getScore() { return score; } public void setScore(double score) { this.score score; } } // 测试类 public class OverrideTest { public static void main(String[] args) { Student student new Student(); student.setScore(90.5); // 调用重写后的showInfo方法子类方法 student.showInfo(); // 调用重写后的getName方法子类方法 System.out.println(学生姓名 student.getName()); // 调用静态方法子类隐藏父类方法用子类名调用 Student.sleep(); // 调用父类静态方法用父类名调用 Person.sleep(); } }运行结果父类姓名张三年龄0 子类学生成绩90.5 学生姓名张三 子类睡觉 父类睡觉3.3 方法重载与方法重写的核心区别面试必背区别维度方法重载Overload方法重写Override定义位置同一个类中子类与父类之间继承关系方法名相同相同参数列表不同个数、类型、顺序相同个数、类型、顺序返回值类型可不同相同或子类小于等于父类访问权限可不同子类≥父类核心作用同一功能的不同实现方式修改/扩展父类方法的功能关键字无特殊关键字Override注解推荐口诀记忆新手必记重载看参数同名不同参同一类重写看继承同名同参子类父类。四、面向对象核心特性多态Polymorphism多态是面向对象的三大特性之一也是Java进阶的核心难点核心思想是“同一方法不同对象有不同的实现”即“一个接口多种实现”。多态能让代码更具灵活性、扩展性是实际开发中常用的编程思想比如Spring框架的依赖注入核心就是多态。类比理解“动物叫”这个行为狗叫是“汪汪汪”猫叫是“喵喵喵”鸟叫是“叽叽叽”——同一个“叫”的方法不同的动物对象有不同的实现这就是多态。4.1 多态的实现条件必须同时满足面试重点多态的实现依赖3个条件缺一不可新手必须牢记存在继承关系子类继承父类子类重写父类的方法核心没有重写就没有多态父类引用指向子类对象核心语法父类名 引用名 new 子类名();。关键语法父类引用指向子类对象// 格式父类名 引用名 new 子类名(); Person student new Student(); // 父类Person引用指向子类Student对象 Person teacher new Teacher(); // 父类Person引用指向子类Teacher对象4.2 多态实战案例吃透核心结合继承和方法重写实现多态// 父类Animal动物类 public class Animal { // 父类方法被子类重写 public void cry() { System.out.println(动物在叫); } } // 子类Dog狗类继承Animal重写cry方法 public class Dog extends Animal { Override public void cry() { System.out.println(狗在叫汪汪汪~); } // 子类特有方法 public void eat() { System.out.println(狗在吃骨头); } } // 子类Cat猫类继承Animal重写cry方法 public class Cat extends Animal { Override public void cry() { System.out.println(猫在叫喵喵喵~); } } // 子类Bird鸟类继承Animal重写cry方法 public class Bird extends Animal { Override public void cry() { System.out.println(鸟在叫叽叽叽~); } } // 测试类多态实现 public class PolymorphismTest { public static void main(String[] args) { // 1. 父类引用指向子类对象多态核心语法 Animal animal1 new Dog(); Animal animal2 new Cat(); Animal animal3 new Bird(); // 2. 调用cry方法多态体现同一方法不同对象有不同实现 animal1.cry(); // 输出狗在叫汪汪汪~调用Dog的cry方法 animal2.cry(); // 输出猫在叫喵喵喵~调用Cat的cry方法 animal3.cry(); // 输出鸟在叫叽叽叽~调用Bird的cry方法 // 3. 多态的注意点父类引用不能直接调用子类特有方法 // animal1.eat(); // 错误Animal引用无法调用Dog的特有方法eat() // 解决方法向下转型将父类引用转为子类引用 if (animal1 instanceof Dog) { // 判断animal1是否是Dog类型的对象 Dog dog (Dog) animal1; // 向下转型 dog.eat(); // 可以调用子类特有方法 } } }运行结果狗在叫汪汪汪~ 猫在叫喵喵喵~ 鸟在叫叽叽叽~ 狗在吃骨头4.3 多态的核心细节新手必懂1多态的核心父类引用调用重写方法时执行的是子类的方法当父类引用指向子类对象时调用的重写方法是“子类的方法”而不是父类的方法——这是多态的核心体现也是“同一方法不同实现”的本质。比如上面的animal1.cry()animal1是Animal类型的引用但指向的是Dog对象所以执行的是Dog类的cry方法而不是Animal类的cry方法。2多态的限制父类引用不能直接调用子类特有方法父类引用只能访问父类中定义的属性和方法无法直接访问子类特有的属性和方法比如Animal引用无法调用Dog的eat方法。如果需要调用子类特有方法必须进行“向下转型”。3转型向上转型与向下转型重点多态中的转型分为两种类比“向上转型”是“自动类型转换”“向下转型”是“强制类型转换”和基本数据类型的转换类似。向上转型自动转型子类对象赋值给父类引用无需强制转换是多态的核心语法比如Dog dog new Dog(); Animal animal dog; 或直接Animal animal new Dog();向下转型强制转型父类引用转为子类引用需要强制转换比如Animal animal new Dog(); Dog dog (Dog) animal;转型前建议用instanceof关键字判断避免转型错误。instanceof关键字判断一个对象是否是某个类或其子类的实例返回boolean类型语法对象 instanceof 类名。Animal animal new Dog(); // 判断animal是否是Dog类的实例 if (animal instanceof Dog) { Dog dog (Dog) animal; // 转型成功 } // 判断animal是否是Cat类的实例false if (animal instanceof Cat) { Cat cat (Cat) animal; // 转型失败报错ClassCastException }4.4 多态的优势实际开发常用提高代码的灵活性同一方法不同对象有不同实现无需修改代码就能实现不同功能提高代码的扩展性新增子类时无需修改原有父类代码和测试代码只需让子类继承父类、重写方法即可比如新增Pig类只需重写cry方法就能直接用Animal引用调用降低代码的耦合度父类引用指向子类对象调用方法时无需关心具体是哪个子类对象只需关注父类接口简化代码逻辑。4.5 多态的常见易错点新手必看多态实现条件缺失缺少继承、方法重写、父类引用指向子类对象中的任意一个都无法实现多态父类引用调用子类特有方法直接用父类引用调用子类特有方法报错向下转型未判断未用instanceof判断就强制转型导致类型转换异常ClassCastException静态方法无法实现多态静态方法属于类不属于对象父类引用调用静态方法时执行的是父类的静态方法不是子类的。五、新手高频易错点总结必看避坑指南继承相关误以为Java支持多继承、子类继承父类构造方法、super()位置错误、父类有参构造未手动调用方法重载与重写混淆分不清“同名不同参”和“同名同参”重写时不满足条件比如返回值类型错误、访问权限不足多态相关多态实现条件缺失、父类引用调用子类特有方法、向下转型未用instanceof判断导致报错访问权限混淆子类无法访问父类private成员误以为protected修饰的成员在其他类中也能访问。六、总结本篇文章重点讲解了Java面向对象进阶的三大核心知识点——继承、方法重载与重写、多态这是Java进阶的关键也是面试高频考点。我们学会了用继承解决代码冗余用方法重写扩展父类功能用多态提高代码的灵活性和扩展性同时通过实战案例吃透了每个知识点的核心细节和易错点理解了面向对象思想的精髓。

相关文章:

第6篇:Java面向对象进阶:继承、重写与多态,解锁代码复用新姿势

上一篇我们掌握了Java面向对象基础,学会了定义类、创建对象,用封装保护数据安全,用构造方法简化对象初始化,完成了面向对象版的学生成绩管理案例。但在实际开发中,我们会遇到“多个类拥有相同属性和方法”的场景——比…...

K8s Pod 调度策略与优先级算法优化

Kubernetes作为容器编排领域的标杆,其Pod调度策略与优先级算法的优化直接影响集群资源利用率与应用稳定性。随着企业微服务规模扩大,如何让调度器更智能地平衡节点负载、保障关键业务,成为运维团队的核心挑战。本文将深入剖析调度优化关键技术…...

论文阅读:ICLR 2026 AlphaSteer: Learning Refusal Steering with Principled Null-Space Constraint

总目录 大模型安全研究论文整理 2026年版:https://blog.csdn.net/WhiffeYF/article/details/159047894 https://openreview.net/forum?id1vvbzAqdTe ![ ICLR 2026 | 零空间安全操控 📄 论文背景与基本信息 《AlphaSteer: Learning Refusal Steering…...

C 表达式中的汇编指令

asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析。 asm 表达式有两种形式,第二种 asm-qualifiers 包含了 goto 语句。 第一种形式为常见的用法&#…...

如何永久免费使用IDM:开源激活脚本完整指南

如何永久免费使用IDM:开源激活脚本完整指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager(IDM&#x…...

关于C++11的统一初始化语法示例详解

前言本文主要给大家介绍了C11统一初始化语法的相关内容,关于在当前新标准C11的语法看来,变量合法的初始化器有如下形式:1234X a1 {v};X a2 {v};X a3 v;X a4(v);其实,上面第一种和第二种初始化方式在本质上没有任何差别&#xff…...

Win11Debloat:免费Windows系统优化工具终极指南,轻松提升44%性能

Win11Debloat:免费Windows系统优化工具终极指南,轻松提升44%性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other change…...

云端还是本地?哪种RFID固定资产系统更合适你的企业?

在数字化转型的浪潮中,越来越多的企业认识到RFID固定资产管理系统的重要性。但当真正准备引进系统时,一个关键却绕不开的问题便摆在面前:到底该选云端还是本地部署?这不仅仅是技术路线的选择题,更关乎企业的成本结构、…...

Ostrakon-VL-8B数据预处理详解:餐饮图像清洗与标注规范

Ostrakon-VL-8B数据预处理详解:餐饮图像清洗与标注规范 如果你正在尝试训练或微调像Ostrakon-VL-8B这样的视觉语言模型,来让它更好地理解餐饮场景,那你肯定知道,数据质量是决定成败的关键。模型再强大,如果喂给它的是…...

推荐2款无需安装实用软件,桌面图标整理设置,简真是Windows神器!

聊一聊今天给大家推荐2款桌面美化小工具。为什么觉得要推荐这个小工具呢?因为最近帮一些人远程处理一些问题。感觉那电脑桌面,密密麻麻,全是小图标。我想找个东西都难,是太难了。我真恨不得上手整理。但又怕整理了,人家…...

mini-job极简分布式延迟任务队列 — 基于 Redis,支持 Cron 周期任务、异步协程和多执行器

mini-job 极简分布式延迟任务队列 — 基于 Redis,支持 Cron 周期任务、异步协程和多执行器。 特性特性说明延迟任务设定延迟秒数,到期自动执行Cron 周期调度支持标准 cron 表达式(分 时 日 月 星期)三种执行器async 协程&#xff…...

内网IP如何申请SSL证书?

一、为什么需要内网IP证书? 很多企业有一个误区:认为“只有域名才能做HTTPS”,或者“内网用HTTP没关系”。现实恰恰相反: 合规硬指标:《数据安全法》等法规明确要求数据传输必须加密,内网明文传输在等保测…...

FastAPI + PostgreSL 实战:给应用装上“缓存”和“日志”翅膀

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条折…...

PMC Organometallix宣布所有产品提价

鉴于市场环境发生重大变化,PMC Organometallix, Inc. 宣布,自2026年5月1日起(或根据合同条款允许的时间),全球所有产品线的价格将上调10%至25%。此次调整源于关键投入成本的持续压力,包括原材料成本上涨以及…...

网络安全渗透测试入门|无线安全渗透与防御完整教程

前言 这是给粉丝盆友们整理的网络安全渗透测试入门阶段无线安全渗透与防御教程 喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。 1.Aircrack-ng简介 Aircrack- NG是一个完整的工具来评估Wi-Fi网络安全套件。 捕获&#x…...

告别Swagger默认丑界面!.NET Core 6项目集成Knife4jUI保姆级教程

.NET Core 6项目集成Knife4jUI:打造专业级API文档体验 在当今快节奏的开发环境中,API文档的质量直接影响着团队协作效率。许多.NET Core开发者虽然已经使用Swagger生成基础文档,却常常面临界面简陋、功能单一的问题。Knife4jUI作为Swagger UI…...

Qt项目拆分之术:如何用SUBDIRS把大工程拆成小模块(从app到lib的实战)

Qt项目模块化实战:用SUBDIRS构建可扩展工程架构 当你的Qt项目从几百行代码膨胀到数万行时,编译时间开始以分钟计算,团队协作频繁出现文件冲突,新成员面对庞杂的目录结构不知所措——这就是我们需要模块化拆分的临界点。上周我接手…...

5分钟搭建家庭电视直播系统:Kodi IPTV Simple完全指南

5分钟搭建家庭电视直播系统:Kodi IPTV Simple完全指南 【免费下载链接】pvr.iptvsimple IPTV Simple client for Kodi PVR 项目地址: https://gitcode.com/gh_mirrors/pv/pvr.iptvsimple 还在为电视直播体验烦恼吗?想用最简单的方式把网络直播源整…...

Python程序打包为EXE

PowerShell 用anaconda创建虚拟环境 conda -n create XXXconda initconda activate xxx进入要打包的文件夹中安装依赖pip install -r requirements.txt 打包pyinstaller -F -w main.py --clean --noconfirm...

软件产品负责人管理中的需求决策者

在软件开发领域,产品负责人(Product Owner)是决定产品成败的关键角色之一,而需求决策者则是这一角色的核心职能。他们不仅需要理解市场和用户需求,还要在资源有限的情况下,权衡优先级,确保团队交…...

【基于 macOS 虚拟机的 iMessage 批量消息处理技术实践】

一、研究背景与技术意义iMessage 作为苹果生态内置的原生通讯服务,依托系统底层优势,具备端到端加密、无运营商拦截、原生展示等特性,常用于企业内部事务提醒、授权用户服务告知等合规场景。在技术研究过程中,手动单条发送消息效率…...

从ArrayList到VectorSpecies:Java向量化开发全流程拆解,含GraalVM AOT+Linux perf火焰图调优实战

更多请点击: https://intelliparadigm.com 第一章:Java 25 向量 API 硬件加速概览 Java 25 正式将 jdk.incubator.vector 模块升级为标准 API(java.util.vector),标志着 JVM 首次原生支持跨平台向量化计算&#xff0c…...

Live Avatar数字人模型保姆级部署教程:4步搞定AI视频生成

Live Avatar数字人模型保姆级部署教程:4步搞定AI视频生成 1. 准备工作:硬件与软件环境检查 1.1 硬件要求详解 Live Avatar对硬件有明确要求,这是确保模型正常运行的基础: 显卡要求: 最低配置:单卡NVIDIA…...

如何提升域名价值——评估标准

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...

深度对比:瑞芯微RK3588边缘盒子 vs 其他方案,在智慧油站车牌识别场景下的真实表现

智慧油站车牌识别实战:RK3588边缘计算盒子的性能突围战 当加油站开始拥抱智能化转型,车牌识别系统便成了连接物理世界与数字服务的"第一道闸机"。在华北某连锁油站的改造案例中,技术团队曾面临这样的困境:传统工控机处理…...

告别zipfile!用PyZipper给你的Python压缩文件加上AES-256密码锁(附中文乱码解决方案)

用PyZipper实现AES-256加密压缩:Python开发者的安全实践指南 在数据交换和备份场景中,ZIP文件是最常见的归档格式之一。但标准库zipfile提供的加密功能实际上非常脆弱——它使用的传统加密算法早在1999年就被证明可以在极短时间内被暴力破解。当我们需要…...

DownKyi:你的B站视频下载管家,从新手到高手的完整指南 [特殊字符]

DownKyi:你的B站视频下载管家,从新手到高手的完整指南 🎬 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音…...

Hypnos-i1-8B开发环境配置:VSCode远程连接与调试教程

Hypnos-i1-8B开发环境配置:VSCode远程连接与调试教程 1. 引言 如果你正在使用Hypnos-i1-8B这样的开源大模型,可能会遇到一个常见问题:本地电脑配置不够,而远程服务器上的开发体验又不够友好。今天我们就来解决这个痛点&#xff…...

DC‑1 靶机完整渗透思路 + 详细步骤(可直接复现)

核心思路:信息收集 → Drupal 远程代码执行 → 拿 Webshell → 数据库信息利用 → SUID 提权 → 拿 Root 与全部 Flag一、环境准备攻击机:Kali Linux(NAT 模式)靶机:DC‑1(VulnHub 下载,NAT 模式…...

从自动驾驶到机器人:双目视差生成点云在实际项目里怎么用?

从自动驾驶到机器人:双目视差生成点云在实际项目中的工程化实践 当机器人需要在未知环境中自主导航,或是自动驾驶汽车试图理解周围的三维空间时,双目视觉系统往往扮演着关键角色。不同于激光雷达的高成本,双目相机以相对经济的硬件…...