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

方法重写时的访问权限限制_子类方法权限不能低于父类

老婷酱_9781

老婷酱_9781

发布时间:2026-02-14 11:33:09

|

477人浏览过

|

来源于php中文网

原创

子类重写父类方法时访问修饰符不能比父类更严格:public只能重写为public,protected可重写为protected或public,但不可降为private或默认(包私有);private方法不可重写,仅隐藏;protected重写为默认修饰符将编译失败。

方法重写时的访问权限限制_子类方法权限不能低于父类

子类重写方法时访问修饰符不能比父类更严格

Java 中,子类重写父类方法时,public 可以重写为 public,protected 可以重写为 protected 或 public,但绝不能降级为 private 或包私有(即不写修饰符)。编译器会直接报错,不是运行时问题。

  • private 方法不能被重写(本质是隐藏),所以子类里写个同名 private 方法,和父类完全无关
  • 父类是 protected,子类用默认(包访问)修饰符:编译失败 —— 包访问权限 protected
  • 父类是 public,子类写成 protected:编译失败 —— 违反“子类方法契约不能收缩”原则

为什么 Java 要强制这个限制

这是为了保障里氏替换原则(LSP):任何父类出现的地方,子类都能安全替换。如果子类把方法从 public 改成 protected,外部代码调用父类引用指向子类实例时,原来能调的方法突然不可见了,逻辑直接崩。

  • 接口实现也适用同一规则:实现类中 @Override 的方法,访问权限必须至少是 public(接口方法默认 public)
  • 抽象方法被重写时同样受约束,哪怕父类是 protected abstract,子类实现也不能收窄
  • IDE 通常不会提示这个错误,直到编译 —— 所以别依赖自动补全来判断权限是否合法

常见报错信息和定位方式

编译时会明确告诉你哪一行越权了,错误信息长这样:Cannot reduce the visibility of the inherited method from XXX。重点看 “inherited method” 后面的类名和方法签名。

  • 检查父类方法声明位置,确认它的实际修饰符(注意继承链中可能被中间类改过)
  • 确认子类方法上没多写 private、protected(当父类是 public 时)
  • 留意 IDE 自动生成功能(如 Eclipse/IntelliJ 的 Override 生成)有时会默认加 public,但如果你手动删了,就容易踩坑

特殊情况:static 和 final 方法不参与重写

static 方法是静态绑定,子类里“同名”只是隐藏(hiding),不受访问权限限制规则约束;final 方法不能被重写,所以谈不上权限变化。这两类都不会触发上面的编译错误。

  • 子类写 static void foo(),父类也有 static void foo():不报错,但不是重写,调用取决于引用类型
  • 子类试图 @Override 一个 final 方法:编译错误是 method is final,和权限无关
  • 误以为 private 方法能被重写,然后在子类里调用不到 —— 实际是两个独立方法,彼此不可见
子类方法访问权限的边界很硬,没有妥协余地,而且错误只在编译期暴露,运行前不检查就容易漏掉。最稳妥的做法是:只要父类方法是 public,子类重写时无脑写 public;父类是 protected,子类优先用 public,除非你明确需要限制调用范围且已评估所有继承路径。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

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

蛙蛙写作

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

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

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

DeepSeek

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

相关专题

更多
eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

710

2023.06.14

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

6086

2023.07.24

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

9499

2023.11.02

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2804

2024.02.23

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

662

2024.02.23

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

3946

2025.10.10

eclipse字体放大教程
eclipse字体放大教程

本专题整合了eclipse字体放大教程,阅读专题下面的文章了解更多详细内容。

3965

2025.10.10

eclipse左边栏不见了解决方法
eclipse左边栏不见了解决方法

本专题整合了eclipse左边栏相关教程,阅读专题下面的文章了解更多详细内容。

548

2025.10.15

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

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

精品课程

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

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