Java中 抽象类中的抽象方法在子类重写时怎么改变访问权限
Java中抽象类抽象方法在子类重写时,访问权限只能扩大或保持不变,不能缩小。这是编译器强制规则,保障里氏替换原则和多态安全。父类抽象方法只能是public、protected或默认,子类重写时权限必须不低于父类。
先明确一个基本规则:在 Ja va 里,子类重写抽象类中的抽象方法时,访问权限只能扩大或保持不变,绝不能缩小——这是编译器强制执行的,背后是为了保证里氏替换原则和多态调用的安全性。不少开发者在刚接触继承时都踩过这个坑,其实理解清楚背后的逻辑,就再也不会犯错了。

抽象类中的抽象方法在子类中重写时,访问权限只能扩大或保持不变,不能缩小——这是 Ja va 编译器强制执行的规则,核心是为了满足里氏替换原则和保障多态调用安全。
抽象方法的原始访问权限有哪些
抽象类中声明的抽象方法,其访问修饰符只能是 public、protected 或默认(包私有),不能是 private。原因很简单:private 方法不可被继承,自然也无法被重写。
public abstract void doWork();—— 最常见,跨包可继承protected abstract void sa ve();—— 同包或子类可继承abstract void init();—— 默认(包私有),仅限同包内子类继承
子类重写时允许怎么改
子类实现抽象方法时,必须提供具体方法体,且访问权限必须 ≥ 父类抽象方法的权限。合法调整如下:
- 父类是 public → 子类必须用 public(无法再扩大)
- 父类是 protected → 子类可用 protected 或 public
- 父类是 默认(包私有) → 子类可用 默认、protected 或 public(但前提是子类与抽象类在同一包内;若跨包,则默认方法根本不可见,无法继承)
为什么不能缩小权限
假设父类抽象方法是 public,子类却实现为 protected 或 private,那么通过父类引用调用该方法时就会失败——编译器只认父类声明的可见性,运行时却指向子类实现。这直接破坏了“子类对象能完全替代父类对象”的前提。
举个例子:public abstract class Animal { public abstract void move(); } 若子类写成 private void move() { ... },编译器会报错:Cannot reduce the visibility。
static 和 final 方法不适用此规则
抽象方法本身就不能是 static 或 final,所以不存在“重写 static 抽象方法”的情况。子类中间出现同名 static 方法,属于隐藏(hiding),不是重写;final 方法则根本不可重写。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













