0

0

Java访问修饰符public、private、protected的语法

P粉602998670

P粉602998670

发布时间:2026-02-04 10:51:01

|

525人浏览过

|

来源于php中文网

原创

Java访问修饰符作用位置与范围:public可修饰类(须同名文件)、接口、成员等;protected/private仅限成员及内部类;protected跨包继承时只能通过this或隐式调用,不可通过父类实例访问。

java访问修饰符public、private、protected的语法

Java中public、private、protected能用在哪些位置

这三个修饰符不能随便写在哪都行,它们的合法位置取决于作用对象:类、成员变量、方法、构造器、内部类。比如 private 不能修饰外部类,protected 不能修饰顶层类(即非内部类),而 public 修饰的类必须和文件名一致。

常见错误现象:error: class XXX is public, should be declared in a file named XXX.java —— 就是因为把 public class 放在了错误命名的文件里。

  • public:可修饰类、接口、成员变量、方法、构造器、内部类
  • protected:只能修饰成员变量、方法、构造器、内部类(不能修饰外部类或接口)
  • private:只能修饰成员变量、方法、构造器、内部类(不能修饰类本身,除非是内部类)

不同修饰符的实际访问范围差异

不是“能不能看见”,而是“在什么上下文中能被访问”。Java 的访问控制基于「包」和「继承关系」两个维度,protected 尤其容易误解——它不只是“子类可用”,而是“本包 + 子类(无论是否同包)”。

对比关键点:

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

CG Faces
CG Faces

免费的 AI 人物图像素材网站

下载
  • private:仅当前类内部可访问(连子类都不行)
  • default(不写任何修饰符):仅同一包内可访问(无继承特殊性)
  • protected:同一包内任意类可访问;不同包的子类也可访问(但子类对象不能直接通过“父类实例.受保护成员”调用,必须通过继承链访问)
  • public:任何地方都能访问(前提是类本身可访问)

protected在跨包继承中的典型误用

很多人以为 protected 方法在子类中可以直接通过父类引用调用,结果编译报错:error: protectedMethod() has protected access in Parent。这是因为 Java 对 protected 成员的访问做了限制:子类中只能通过 this 或隐式继承调用,不能通过其他父类实例调用。

class Parent {
    protected void doWork() {}
}

class Child extends Parent {
    void test() {
        this.doWork();        // ✅ 正确:通过 this(即当前子类实例)
        doWork();             // ✅ 正确:隐式继承调用
        new Parent().doWork(); // ❌ 编译错误:Parent 实例不在 Child 类内部定义的继承上下文中
    }
}

修饰符对序列化、反射、Lombok等工具的影响

修饰符不只影响编译期可见性,还会影响运行时行为。例如:

  • 序列化(java.io.Serializable):private 字段默认会被序列化,但 transient 可阻止;protectedpublic 字段同理
  • 反射:AccessibleObject.setAccessible(true) 可绕过所有修饰符限制,但需注意模块系统(Java 9+)可能抛出 InaccessibleObjectException
  • Lombok 注解如 @Data 生成的 toString()getter 默认只处理 public/protected/default 字段,private 字段也会被包含(因为 Lombok 在编译期注入,不受运行时访问限制)

最容易被忽略的是:protected 成员在模块化项目(module-info.java)中,即使同包,若未在 exports 中显式导出,跨模块访问仍会失败——这时修饰符只是第一道门,模块系统是第二道。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

288

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

306

2023.10.25

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1235

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

275

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2194

2025.12.29

java接口相关教程
java接口相关教程

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

33

2026.01.19

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

512

2024.01.03

python中class的含义
python中class的含义

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

17

2025.12.06

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

0

2026.02.04

热门下载

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

精品课程

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

共23课时 | 3.2万人学习

C# 教程
C# 教程

共94课时 | 8.5万人学习

Java 教程
Java 教程

共578课时 | 57.1万人学习

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

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