1.继承1.1为什么要继承Java中使用类类经过实例化之后的产物对象则可以用来表示现实中的实体事物之间可能会存在一些关联在设计程序中需要考虑事物类之间的关联从而使代码更方便也更有结构性。如下两个例子public class Dog{ public String name; public String gander; public int age; public void eat(){ System.out.println(name正在吃饭); } public void sleep(){ System.out.println(name正在睡觉); } public void bark(){ System.out.println(name汪汪汪~); } } public class Cat{ public String name; public String gander; public int age; public void eat(){ System.out.println(name正在吃饭); } public void sleep(){ System.out.println(name正在睡觉); } public void mew(){ System.out.println(name喵喵喵~); } }如上在两个同为动物的Dog类和Cat类在其成员变量相同方法eat和sleep相同只有bark与mew不同1.2继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段它允许程序员在保持原有类特 性 的基础上进行扩展增加新功能这样产生新的类称派生类。继承呈现了面向对象程序设计的层次结构 体现了由简单到复杂的认知过程。继承主要解决的问题是共性的抽取实现代码复用。如上方的Dog与Cat类我们可以创建一个Animal类来作为他们的父类public class Animal(){ public String name; public String gander; public int age; public void eat(){ System.out.println(name正在吃饭); } public void sleep(){ System.out.println(name正在睡觉); } }把相同的成员变量和方法放入一个类中只需要在继承之后加入自己所需的类。1.3继承的语法在Java中如果想要表达类与类之间继承的关系需要借助extends关键字。注意Java不支持多继承修饰符 class子类extends父类{//...}我们再将上面的Dog类和Cat类用继承来实现 public class Animal(){ //父类 public String name; public String gander; public int age; public void eat(){ System.out.println(name正在吃饭); } public void sleep(){ System.out.println(name正在睡觉); } } public class Dog extends Animal{ //子类1 public void bark(){ System.out.println(name汪汪汪~); } } public class Cat extends Animal{ //子类2 public void mew(){ System.out.println(name喵喵喵~); } } 注意1. 子类会将父类中的成员变量或者成员方法继承到子类中了2. 子类继承父类之后必须要新添加自己特有的成员体现出与基类的不同否则就没有必要继承了1.4父类成员的访问子类中成员变量与方法都继承了那么怎么去访问父类的成员变量与方法呢1.4.1子类中访问父类的成员变量1.子类与父类不存在同名变量public class A{ int a; int b; } public class B{ public int c; public int d; public void Method(){ a1; //父类继承来的a b1; //父类继承来的b c1; }2.子类与父类存在同名变量如果访问的成员变量子类中有优先访问自己的成员变量。如果访问的成员变量子类中无则访问父类继承下来的如果父类也没有定义则编译报错。如果访问的成员变量与父类中成员变量同名则优先访问自己的。public class Base { int a; int b; int c; } public class Derived extends Base{ int a; // 与父类中成员a同名且类型相同 char b; // 与父类中成员b同名但类型不同 public void method(){ a 100; // 访问子类自己新增的a b 101; // 访问子类自己新增的b c 102; // 访问父类继承下来的c // d 103; // 编译失败因为父类和子类都没有定义成员变量b } }1.4.2子类中访问父类的成员方法1.成员方法名字不相同public class Base { public void methodA(){ System.out.println(Base中的methodA()); } } public class Derived extends Base{ public void methodB(){ System.out.println(Derived中的methodB()方法); } public void methodC(){ methodB(); // 访问子类自己的methodB() methodA(); // 访问父类继承的methodA() // methodD(); // 编译失败在整个继承体系中没有发现方法methodD() } }2.子类与父类有同名变量public class Base { public void methodA(){ System.out.println(Base中的methodA()); } public void methodB(){ System.out.println(Base中的methodB()); } } public class Derived extends Base{ public void methodA(int a) { System.out.println(Derived中的method(int)方法); } public void methodB(){ System.out.println(Derived中的methodB()方法); } public void methodC(){ methodA(); // 没有传参访问父类中的methodA() methodA(20); // 传递int参数访问子类中的methodA(int) methodB(); // 直接访问则永远访问到的都是子类中的methodB()基类的无法访问到 } }总结通过子类对象访问父类与子类中不同名方法时优先在子类中找找到则访问否则在父类中找找到 则访问否则编译报错。通过派生类对象访问父类与子类同名方法时如果父类和子类同名方法的参数列表不同(重载)根据调用 方法适传递的参数选择合适的方法访问如果没有则报错1.5 super关键字有些场景中子类需要访问父类的成员对此Java提供了super关键字该关键字主要作用在子类方法中访问父 类的成员。public class Base { int a; int b; public void methodA(){ System.out.println(Base中的methodA()); } public void methodB(){ System.out.println(Base中的methodB()); } } public class Derived extends Base{ int a; // 与父类中成员变量同名且类型相同 char b; // 与父类中成员变量同名但类型不同 // 与父类中methodA()构成重载 public void methodA(int a) { System.out.println(Derived中的method()方法); } // 与基类中methodB()构成重写(即原型一致重写后序详细介绍) public void methodB(){ System.out.println(Derived中的methodB()方法); } public void methodC(){ // 对于同名的成员变量直接访问时访问的都是子类的 a 100; // 等价于 this.a 100; b 101; // 等价于 this.b 101; // 注意this是当前对象的引用 // 访问父类的成员变量时需要借助super关键字 // super是获取到子类对象中从基类继承下来的部分 super.a 200; super.b 201; // 父类和子类中构成重载的方法直接可以通过参数列表区分清访问父类还是子类方法 methodA(); // 没有传参访问父类中的methodA() methodA(20); // 传递int参数访问子类中的methodA(int) // 如果在子类中要访问重写的基类方法则需要借助super关键字 methodB(); // 直接访问则永远访问到的都是子类中的methodA()基类的无法访问到 super.methodB(); // 访问基类的methodB() } }在子类中想要访问父类的方法使用super即可1.6子类构造方法1.6.1继承没有参数的构造方法在基类没有参数的构造方法子类直接写即可在子类的构造方法中编译器会帮你补充super。public class Base{ public Base(){ System.out.println(base()) } } public class Derived extends Base{ public Derived(){ //super(); 不写编译器会帮忙自动生成 System.out.println(Derived()) } } public class Test{ public stastic void main(String[] args){ }运行结果base()Derived()子类对象构造时需要先调用基类构造方法然后执行子类的构造方法。1.6.2继承有参数的构造方法子类在编写构造方法需要利用关键字super传递参数给基类 public class Base{ public int A; public Base(int A){ this.AA; } } public class Derived extends Base{ public int B; public Derived(int A,int B){ super(A); this.BB; } /* public Derived(int B){ super(1); //传递的参数不一定要从外获取 this.BB; } */ } public class Test{ public stastic void main(String[] args){ } 1.7初始化运行的顺序在类中不只有成员也有代码块在没有继承关系是先运行静态代码块有且只运行一次再有对象创建时先运行实例化代码块再进行构造方法在有继承关系下又该如何运行编写以下代码class Person { public String name; public int age; public Person(String name, int age) { this.name name; this.age age; System.out.println(Person构造方法执行); } { System.out.println(Person实例代码块执行); } static { System.out.println(Person静态代码块执行); } } class Student extends Person{ public Student(String name,int age) { super(name,age); System.out.println(Student构造方法执行); } { System.out.println(Student实例代码块执行); } static { System.out.println(Student静态代码块执行); } } public class Test{ public static void main(String[] args) { Student student1 new Student(张三,19); System.out.println(); Student student2 new Student(李四,20) } }运行结果为Person静态代码块执行Student静态代码块执行Person实例代码块执行Person构造方法执行Student实例代码块执行Student构造方法执行Person实例代码块执行Person构造方法执行Student实例代码块执行Student构造方法执行由此可见是先运行父类和子类静态代码块有且只运行一次在创建对象是再先运行父类的实例化代码与构造方法再运行子类的.1.8final关键字inal关键可以用来修饰变量、成员方法以及类。1. 修饰变量或字段表示常量(即不能修改)inal int a 10; a 20; // 编译出错2. 修饰类表示此类不能被继承inal public class Animal { ... } public class Bird extends Animal { ... } // 编译出错 Error:(3, 27) java: 无法从最终com.bit.Animal进行继
企业数字化 ERP 产品动态
相关推荐
政务内网AI办公的合规边界与落地要点 政务、司法等单位对AI办公的需求在增加,但公网AI工具的数据边界、内容留存和权限控制,往往难以满足内网办公要求。于是,私有化部署、内网AI成为常见选项。但内网部署只是起点,不等于合规,也不等于好用。下面五个问题&a… · 2026/11/3 2:13:22
UniHacker:跨三大系统破解 Unity 全版本,4.x 到 2022.1 一键打通 UniHacker:跨三大系统破解 Unity 全版本,4.x 到 2022.1 一键打通 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker
装了国际版 Unity 却… · 2026/11/3 2:13:22
免费AutoHotkey教程:如何编写并运行第一个Windows自动化热键脚本 免费AutoHotkey教程:如何编写并运行第一个Windows自动化热键脚本 【免费下载链接】AutoHotkey AutoHotkey - macro-creation and automation-oriented scripting utility for Windows. 项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey
回复同一封确… · 2026/11/3 2:12:22
* LangGraph 基础入门:定位、核心概念与第一个可运行图 一、LangGraph总览
LangGraph 运行时底层基于自研的 Pregel 运行时,其核心思想借鉴了 Google Pregel 计算模型,用于组织和执行复杂的图计算流程。
1.0. LangGraph和LangChain的版本迭代及定位
LangChain 1.x 的定位发生了明显变化:旧式 Ch… · 2026/11/3 2:49:27
squish6.3自动化代码用例编写 一、 用例函数之 init() 和 cleanup()
附加模式下 一定要注意用例结束后的恢复工作,否则会造成后续用例失败;
squish中默认提供了init和cleanup函数:
init()方法失败,main()方法不执行,cleanup()方法会执行;… · 2026/11/3 2:49:27
【元宝搜索开发者征文大赛】少点幻觉,多点搜索:我做了个政策过期检测器 目录
前言
1 起因:AI 拿着一份过期三年的补贴政策,差点让他报错材料
2 为什么治「政策幻觉」,非得用元宝搜索不可
3 先把钥匙拿到手:元宝搜索 API Key 开通全流程
3.1 开通服务,把版本选对
3.2 先用 curl 打通一… · 2026/11/3 2:49:27
大模型小白必看:收藏这份AI Agent底层逻辑解析,轻松上手构建智能应用 本文深入解析AI Agent的核心运作机制,揭示其本质为“调用工具的循环系统”。文章详细拆解了Agent的四大核心组件:Loop循环机制、Tools工具调用能力、Memory记忆模块以及Harness调度管控模块,并阐述了它们如何协同工作以实现智能任务执行。通过… · 2026/11/3 2:49:27
从0开始学架构-结束语:坚持,成就你的技术梦想 “从0开始学架构”专栏历经4个月的时间,现在到了跟你说再见的时候了。一路走来,非常感谢你的坚持。看到专栏的内容能够帮助你理解架构设计这个看起来高大上的技术,我非常欣慰,也算完成了自己3年前的一个心愿:帮助更多同学更快更好地掌握架构设计的技术。 专栏的结束意味着… · 2026/11/3 2:48:27
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18