0

0

Java中的方法重写需要注意什么_方法重写规则与常见问题解析

P粉602998670

P粉602998670

发布时间:2025-12-21 16:12:53

|

561人浏览过

|

来源于php中文网

原创

Java方法重写需满足:签名完全一致(含方法名、参数列表)、访问权限不更严格、返回类型协变兼容、检查型异常不扩大;static、final、private方法不可重写。

java中的方法重写需要注意什么_方法重写规则与常见问题解析

Java中方法重写(Override)是面向对象多态性的核心机制,但若不遵守规则,轻则编译失败,重则引发运行时逻辑错误。关键在于:子类方法必须与父类被重写方法具有相同的签名(方法名、参数列表),且访问权限不能更严格,返回类型需协变兼容,异常声明不能抛出新或更宽泛的检查型异常。

方法签名必须完全一致

重写要求子类方法名、参数个数、参数类型顺序、参数类型(含泛型擦除后)与父类方法严格一致。注意:

  • 仅返回类型不同不算重写,而是编译错误(除非是协变返回类型,见下条)
  • 参数名称可以不同,但类型和顺序不可变;int aint b 视为相同参数
  • 可变参数(...args)与数组参数(int[] args)在擦除后等价,二者互为重写关系,但混用易引发歧义,应避免

返回类型支持协变,但有明确限制

从Java 5起允许子类重写方法时使用更具体的返回类型(协变返回),前提是该类型是父类方法返回类型的子类型:

  • 父类方法返回 Object,子类可返回 String 或自定义类(如 User
  • 但不能返回无关类型(如 Integer 重写返回 String 的方法)
  • 基本类型和其包装类之间不构成协变关系(intInteger 不能互相重写)

访问修饰符不能更严格,异常声明不能扩大

子类重写方法的可见性只能等于或大于父类方法(private 方法不可被重写):

Video Summarization
Video Summarization

一款可以自动将长视频制作成短片的桌面软件

下载

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

  • 父类是 protected,子类可用 public,但不能用 private 或包级(默认)
  • 关于异常:子类方法可抛出更少或更具体的检查型异常(IOExceptionFileNotFoundException),但不能新增或抛出更宽泛的检查型异常(如父类没声明异常,子类不能加 throws Exception
  • 运行时异常(RuntimeException 及其子类)不受此限,可自由添加或删除

常见误判与陷阱

这些情况看似像重写,实为重载或编译错误:

  • static 方法不能被重写(可被隐藏),子类同名静态方法与父类静态方法构成“隐藏”,调用取决于引用类型而非实际类型
  • final 方法不能被重写,编译直接报错
  • 父类方法为 private,子类中同名方法只是新定义,与重写无关(因为 private 方法不可见、不可继承)
  • 忘记加 @Override 注解:虽非强制,但强烈建议添加——它让编译器帮你校验是否真正在重写,避免拼写错误(如 hashcode() 写成 hashCode())导致意外重载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

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

422

2023.08.02

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

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

52

2025.11.27

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

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

15

2025.11.27

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

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

15

2025.11.27

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

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

15

2025.11.27

string转int
string转int

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

422

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

544

2024.08.29

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.9万人学习

C# 教程
C# 教程

共94课时 | 7.7万人学习

Java 教程
Java 教程

共578课时 | 52.1万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号