讲师中心 微信公众号
AI工具推荐 视频效率加速

Java中的方法_定义、调用、重载、重写与参数传递机制详解

星晨吖_9149

星晨吖_9149

发布时间:2026-02-16 12:30:02

|

175人浏览过

|

来源于php中文网

原创

Java方法重载是编译期静态绑定,依据形参类型匹配签名;重写是运行期动态绑定,依据实际对象类型;参数传递均为值传递,引用类型传递的是地址副本。

java中的方法_定义、调用、重载、重写与参数传递机制详解

Java 中的方法定义和调用本身不难,但重载(overload)和重写(override)经常被混淆,参数传递机制又常被误认为“支持引用传递”,这些地方一旦理解偏差,会在调试时浪费大量时间。

方法定义与调用:签名决定能否被找到

方法是否能被调用,只取决于编译期能否匹配到一个明确的 方法签名(即方法名 + 参数类型序列,与返回值、修饰符无关)。JVM 不关心返回值类型,所以仅靠返回值不同无法构成重载。

  • public void print(String s) 和 private void print(String s) 是同一个签名,编译失败(重复声明)
  • void print(int x) 和 void print(Integer x) 是两个不同签名,可以共存(自动装箱不改变签名判定时机)
  • 调用 print(5) 会优先匹配 int 版本,而非 Integer;除非显式写成 print((Integer)5)

重载(Overload):编译期绑定,看的是“形参类型”

重载发生在同一个类中,是静态多态。编译器根据调用处传入的实参类型(不是运行时对象类型!)决定调用哪个方法。

  • 子类中定义 void show(Object o) 和 void show(String s),调用 show(null) 会编译报错:歧义(null 可匹配任意引用类型)
  • float 类型实参传给 double 形参方法是合法的(自动提升),但不会触发 float 版本重载(如果存在)
  • 可变参数(... )是重载的“兜底选项”,只有在无更精确匹配时才启用;method(String...) 比 method(Object) 更具体

重写(Override):运行期绑定,看的是“实际对象类型”

重写要求子类方法与父类方法具有相同签名(包括返回类型协变)、访问权限不能更严格、不能抛出新或更宽泛的检查异常。它由 JVM 在运行时通过虚方法表(vtable)动态分派。

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载

立即学习“Java免费学习笔记(深入)”;

  • 若父类方法是 protected void run(),子类重写为 public void run() 合法;但 private void run() 是定义新方法,不是重写
  • @Override 注解不是必需的,但强烈建议加上——它能在父类方法被删/改名时立刻报错,而不是静默变成重载或新方法
  • 构造器、static 方法、final 方法不能被重写;其中 static 方法看似“重写”,实则是隐藏(hiding),调用取决于引用类型而非对象类型

参数传递:Java 只有值传递,对象也是传“引用的值”

Java 中所有参数都是值传递。基本类型传的是值的副本;引用类型传的是“对象地址的副本”。这意味着你无法在方法内让外部引用指向新对象,但可以通过该引用来修改对象状态。

  • void swap(StringBuilder a, StringBuilder b) { StringBuilder t = a; a = b; b = t; } —— 外部变量不会交换,因为 a 和 b 是局部拷贝
  • void append(StringBuilder sb) { sb.append("x"); } —— 外部 sb 内容会变,因为操作的是同一堆内存中的对象
  • 不可变类(如 String)会让这个机制显得像“传值”,其实是对象本身不允许修改,不是传递方式变了

最容易被忽略的是:重载解析完全在编译期完成,而重写调用在运行期才确定;参数传递机制则从头到尾没有“引用传递”这回事——哪怕你看到 list.add() 改变了外部列表,也只是因为你持有的是同一份堆内存的地址副本。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3060

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6699

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

6887

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

804

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

355

2025.11.27

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn