Java 重写 Override 与重载 Overload 区别、访问修饰符、static 关键字

发布时间:2026/10/29 10:54:58

Java 重写 Override 与重载 Overload 区别、访问修饰符、static 关键字 前言Java 面向对象面试有一套连环组合题重载 重写、访问修饰符、static 关键字。不少人的误区以为返回值不同就可以构成重载以为静态方法可以重写分不清 protected 在不同包子类的访问权限搞混静态代码块、构造代码块、构造方法执行顺序。本文一站式搞定这一组高频考点从底层定义、完整代码实战、边界规则、误区解析、工程选型全部覆盖。适合 Java 基础巩固也适合集中复盘。一、重载 Overload1. 核心定义重载发生在同一个类内部多个方法方法名相同参数列表不同。 参数列表不同包含三种情况参数个数不同参数类型不同参数顺序不同不同类型参数调换顺序重点返回值、访问修饰符不能作为重载的判断条件。编译器在调用方法时只看传入实参无法通过返回值类型区分调用哪个方法。仅返回值不一样编译报错不构成重载。 重载属于编译期静态绑定在编译阶段就确定调用哪个方法也叫静态多态。2. 代码实战示例public class OverloadDemo { // 无参方法 public void say() { System.out.println(无参数方法); } // 一个参数 public void say(String name) { System.out.println(姓名 name); } // 两个参数 public void say(String name, int age) { System.out.println(姓名 name 年龄 age); } // 参数顺序不同构成重载 public void say(int age, String name) { System.out.println(年龄 age 姓名 name); } public static void main(String[] args) { OverloadDemo demo new OverloadDemo(); demo.say(); demo.say(张三); demo.say(李四,20); demo.say(22,王五); } }3. 重载的使用场景构造方法重载无参构造、带参构造方便外部以不同方式实例化对象API 工具类同一个功能支持多种入参形式例如日期格式化支持传入 Date、String框架底层大量使用IO、集合、Spring 工具方法大量使用重载提升 API 易用性。二、重写 Override1. 核心定义重写发生在存在继承关系的父子类之间。子类对父类的实例方法重新实现覆盖父类原有逻辑。Override注解编译期校验检查当前方法是否满足重写规范防止手敲写错方法名、参数类型避免误以为重写成功。重写约束规则方法名、参数列表必须与父类完全一致支持协变返回值子类返回值可以是父类返回值的子类子类方法访问权限不能小于父类父类 public子类不能改为 protected/private子类抛出的受检异常范围不能大于父类抛出的受检异常非受检异常无限制父类被 private /static/final 修饰的方法不能重写重写针对实例方法依靠虚方法表实现动态绑定运行期确定执行方法属于真正多态。2. 代码实战示例class Parent { public void hello() { System.out.println(父类 hello 方法); } protected Person getPerson(){ return new Person(); } } class Child extends Parent { // Override 校验重写 Override public void hello() { System.out.println(子类 hello 重写方法); } // 协变返回返回子类对象Student属于合法重写 Override public Student getPerson(){ return new Student(); } } class Person{} class Student extends Person{} public class OverrideTest { public static void main(String[] args) { Parent p new Child(); p.hello(); // 执行子类重写方法多态 } }3. 重载 VS 重写完整对比表对比维度重载 Overload重写 Override发生范围同一个类内部存在继承关系的父类与子类之间方法签名方法名相同参数列表不同方法名、参数列表完全一致返回值返回值不参与重载判断无强制约束支持协变返回返回值必须是父类返回值的子类或本身异常声明无任何异常限制子类抛出的受检异常不能比父类更广访问权限无权限限制可以任意修改子类访问权限不能低于父类绑定时机编译期静态绑定静态多态运行期动态绑定动态多态注解不需要注解推荐添加 Override编译校验适用对象普通成员方法、构造方法仅实例方法static/private/final 方法无法重写4. 高频误区深度解析误区 1返回值不同就可以构成重载纠正编译器调用方法只看传入实参无法依靠返回值区分只修改返回值编译报错。误区 2静态方法可以重写纠正static 属于类不属于实例对象。子类同名静态方法只是静态隐藏不是重写不存在多态。父类引用指向子类对象调用静态方法执行的是父类静态方法。class Father{ public static void test(){ System.out.println(父类静态方法); } } class Son extends Father{ public static void test(){ System.out.println(子类静态方法); } } public class Test{ public static void main(String[] args) { Father f new Son(); f.test(); // 输出父类静态方法没有多态 } }误区 3父类 protected 方法子类重写可以改成 private纠正编译报错重写要求子类权限不能小于父类protected private不允许降级。三、Java 四种访问修饰符 public /protected/default /private访问修饰符控制类、成员变量、成员方法的可见范围编码遵循最小权限原则能小范围访问就不要扩大权限减少对外暴露降低维护成本。default不写任何修饰符也叫包访问权限。修饰符同一类同一个包不同包子类其他包无关类public✅✅✅✅protected✅✅✅❌default (不写)✅✅❌❌private✅❌❌❌各修饰符详解 工程选型建议private优先推荐仅当前类内部可访问。封装的核心实现手段成员变量优先定义 private。只暴露必要 get/set。default包访问权限同包下所有类可以访问跨包哪怕是子类也无法访问。项目内部包内工具类使用业务实体尽量避免使用可控性差。protected同包类 不同包的子类可以访问。用于父类预留扩展点给子类重写业务开发谨慎使用对外暴露范围偏大。public所有包全部可见。用于对外暴露 API、接口、对外工具方法。public 暴露越多后续改动兼容性成本越高。坑点很多人以为 protected所有子类都能访问。必须区分同包子类直接访问不同包子类只能通过子类实例访问父类 protected 成员不能用父类对象访问。四、static 关键字详解静态变量、静态方法、静态代码块static 修饰的内容属于类本身不属于实例对象。在类加载阶段完成初始化早于对象实例创建内存只分配一份所有对象共享。4.1 static 修饰静态变量类变量public static String schoolName;属于类所有实例共享同一块内存修改一处全部对象可见类加载时初始化只初始化一次推荐调用方式类名.静态变量不推荐对象.静态变量语法允许但可读性差并发风险多线程同时修改静态变量极易出现线程安全问题。4.2 static 修饰静态方法类方法public static void show(){ }静态方法只能直接访问静态成员静态变量、静态方法静态方法内部不能直接使用 this、super 关键字静态方法无法访问非静态成员非静态变量 / 非静态方法因为调用静态方法时可能对象还没有创建静态方法不存在重写只有静态隐藏不具备多态。4.3 static 静态代码块static { System.out.println(静态代码块执行); }类加载的时候执行整个生命周期只执行一次执行时机早于构造代码块、构造方法典型用途加载配置文件、初始化静态资源、注册驱动4.4 代码演示执行顺序public class StaticExecuteDemo { static { System.out.println(1.静态代码块); } { System.out.println(2.构造代码块每次new都会执行); } public StaticExecuteDemo() { System.out.println(3.构造方法); } public static void main(String[] args) { System.out.println(main方法开始); new StaticExecuteDemo(); new StaticExecuteDemo(); } }输出结果1.静态代码块 main方法开始 2.构造代码块每次new都会执行 3.构造方法 2.构造代码块每次new都会执行 3.构造方法执行顺序总结静态代码块类加载一次 → 构造代码块每次 new 执行 → 构造方法每次 new 执行4.5 static 高频踩坑清单静态变量全局共享多线程并发修改会产生线程安全问题静态方法不能直接调用非静态成员非静态方法可以访问静态成员静态方法不存在多态子类同名静态方法只是隐藏父类静态方法静态代码块只在类加载执行一次不是创建对象就执行不要在静态代码块做耗时 IO 操作会阻塞类加载影响项目启动速度。五、深度问答Q1重载和重写的区别A重载发生在同一个类方法名相同参数列表不同编译期静态绑定。 重写发生在父子类之间子类重写父类实例方法方法签名一致运行期动态绑定支持多态。重写有异常、权限、返回值约束重载没有权限、异常约束。Q2四种访问修饰符的范围开发遵循什么原则Aprivate 仅本类default 同包protected 同包 不同包子类public 全部包可见。开发遵循最小权限原则能私有就不扩大访问范围。Q3static 的特点静态方法和非静态方法互相访问规则Astatic 修饰的内容属于类类加载时初始化。静态方法只能直接访问静态成员非静态方法可以访问静态成员。静态方法内部没有 this、super。Q4静态代码块什么时候执行static 代码块、构造代码块、构造方法顺序A静态代码块在类加载阶段执行仅执行一次。执行顺序静态代码块 → 构造代码块 → 构造方法。每次 new 对象都会执行构造代码块和构造方法。Q5父类 protected 方法子类重写能不能改成 public能不能改成 privateA可以改成 public权限扩大不能改成 private权限缩小编译报错。重写要求子类访问权限不能低于父类。Q6静态方法能不能重写为什么A不能重写。static 属于类不是实例方法。子类同名静态方法只是隐藏父类静态方法不存在虚方法表动态绑定没有多态。六、总结重载优化 API 设计给调用方多种入参选择提升易用性重写配合多态实现面向抽象编程是策略模式、框架扩展的基础重写记得加上Override访问修饰符坚持最小权限原则成员变量优先 private谨慎使用 protected、publicstatic静态资源慎用静态变量共享带来线程安全风险静态代码块适合一次性初始化轻量资源不要做耗时操作。结语重载、重写、访问修饰符、static 关键字是 Java 面向对象体系里一套组合考点。很多时候都会结合 OOP 三大特性一起提问比如重写的权限限制、静态方法能不能多态。 学习的时候不要孤立记忆知识点把语法规则、底层绑定、工程实践结合起来才可以从容应对追问。
延伸阅读

更多相关文章

2026/10/29 10:54:58

iloader:iPhone 侧载 SideStore 与导入 IPA,全程不碰命令行

iloader:iPhone 侧载 SideStore 与导入 IPA,全程不碰命令行 【免费下载链接】iloader User friendly sideloader 项目地址: https://gitcode.com/GitHub_Trending/iloa/iloader 用其他工具装 SideStore,装完往往还要把 rppairing、loc…

2026/10/29 10:54:58

计算机服务巡检

一、先一句话总览物理核:CPU真实硬件核心;逻辑核:超线程(SMT)虚拟出来的核心;频率:核心每秒运算次数;进程:程序运行的独立资源容器;线程:进程里面…

2026/10/29 10:49:57

yunerDesk—API包装,服务器运维,数据推送,同步

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 12:05:22

信号与系统知识地图:三层响应驱动的时频域分析框架

简介:本资源是一份面向电子信息类专业本科生与考研学生的《信号与系统》核心考点精要复习文档,聚焦课程重难点突破与应试梳理。全文系统覆盖信号分类与典型奇异信号(阶跃、冲激及其性质)、时域运算(移位、反褶、尺度变…

2026/10/29 12:05:22

Windows下GDAL安装与配置全攻略

1. Windows环境下GDAL安装全流程解析 GDAL作为地理数据处理领域的"瑞士军刀",在遥感影像处理、GIS分析等领域有着不可替代的地位。但对于Windows平台的新手来说,从源码编译到环境配置往往是一道令人望而生畏的门槛。本文将彻底拆解Windows系统…

2026/10/29 12:05:22

Cursor编辑器Agent Skills功能深度解析与应用指南

1. Cursor中的Agent Skills功能解析作为一名长期使用各类IDE工具的开发者,第一次在Cursor中接触到"Agent Skills"这个概念时,确实让我眼前一亮。这个功能本质上是一套内置于Cursor编辑器中的AI辅助工具集,它不同于传统的代码补全或…

2026/10/29 12:05:22

跨平台工具开发避坑指南:系统差异、兼容策略与构建分发全解析

跨平台工具最让人头疼的地方,往往不是功能本身写不出来,而是同一份代码在三个系统上跑出三种脾气。我前后在 Linux、Windows、macOS 上折腾过不少命令行工具和桌面小工具,踩过的坑能写满一页纸:路径分隔符不一致、换行符把脚本搞崩…

2026/10/29 12:05:22

FPGA数字频率计设计:从时序控制到数码管显示的完整实现

简介:本资源是一份面向电子类本科生与FPGA初学者的数字频率计课程设计完整报告,聚焦Verilog HDL在数字系统中的典型应用,解决高频信号(10Hz~10MHz)精准测量与动态显示的工程实践问题。报告涵盖分频器、门控…

2026/10/29 12:00:21

audl服务器上HuggingFace下载缓慢?从DNS到缓存的逐层优化实战

1. 问题定位:先搞清楚“慢”到底慢在哪 “audl服务器上 huggingface缓慢”这个标题,我第一次看到的时候会心一笑——这几乎是每个在内部训练服务器上折腾模型的人都会撞上的墙。audl服务器通常指团队内部那台挂着多卡、跑着共享任务的计算节点&#xff0…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑