Java 访问权限控制符详解

发布时间:2026/11/7 19:04:22

Java 访问权限控制符详解 1. 访问权限控制符概述在 Java 中访问权限控制符Access Modifiers是用于控制类、接口、变量、方法等成员可见性的关键字。它们决定了其他类是否可以访问某个成员是实现面向对象编程中“封装”特性的重要手段。Java 提供了四种访问权限级别从最宽松到最严格依次为public、protected、default包访问权限无关键字和private。2. 四种访问权限详解2.1 public公共的public是限制最宽松的访问级别。被public修饰的成员可以被任何其他类访问无论这些类是否在同一个包中或者是否是子类。// 示例public 类和方法 public class PublicDemo { public String publicField 这是一个公共字段; public void publicMethod() { System.out.println(这是一个公共方法); } } // 在其他任何类中都可以访问 class AnotherClass { public void test() { PublicDemo demo new PublicDemo(); System.out.println(demo.publicField); // 可以访问 demo.publicMethod(); // 可以调用 } }使用场景对外提供的 API 接口、工具类方法、常量等。2.2 protected受保护的protected修饰的成员可以被同一包内的其他类访问也可以被不同包中的子类访问。// 父类在包 com.example package com.example; public class Parent { protected String protectedField 受保护字段; protected void protectedMethod() { System.out.println(受保护方法); } } // 子类在另一个包 com.test package com.test; import com.example.Parent; public class Child extends Parent { public void accessProtected() { System.out.println(protectedField); // 可以访问通过继承 protectedMethod(); // 可以调用 } } // 非子类即使在同一个包也不能直接访问 protected 成员除非通过子类实例 class UnrelatedClass { public void test() { Parent parent new Parent(); // System.out.println(parent.protectedField); // 编译错误 // parent.protectedMethod(); // 编译错误 } }使用场景希望子类能够继承和覆盖但不希望对外完全公开的成员。2.3 default包访问权限当不使用任何访问修饰符时成员具有包访问权限也称为默认访问权限。这意味着它只能被同一个包内的其他类访问。// 在包 com.example 中 package com.example; class DefaultClass { // 默认访问权限的类 String defaultField 默认字段; // 默认访问权限的字段 void defaultMethod() { // 默认访问权限的方法 System.out.println(默认方法); } } // 同一个包内的其他类可以访问 class SamePackageClass { public void test() { DefaultDemo demo new DefaultDemo(); System.out.println(demo.defaultField); // 可以访问 demo.defaultMethod(); // 可以调用 } } // 不同包中的类无法访问 package com.other; import com.example.DefaultDemo; class DifferentPackageClass { public void test() { // DefaultDemo demo new DefaultDemo(); // 编译错误类不可见 // 即使能创建实例也无法访问 default 成员 } }使用场景包内工具类、内部实现细节不希望被包外访问。2.4 private私有的private是限制最严格的访问级别。被private 修饰的成员只能在其定义的类内部访问即使是子类也不能直接访问。public class PrivateDemo { private String privateField 私有字段; private void privateMethod() { System.out.println(私有方法); } // 通过公共方法提供访问封装 public String getPrivateField() { return privateField; } public void setPrivateField(String value) { this.privateField value; } public void callPrivateMethod() { privateMethod(); // 类内部可以调用 } } class TestClass { public void test() { PrivateDemo demo new PrivateDemo(); // System.out.println(demo.privateField); // 编译错误 // demo.privateMethod(); // 编译错误 // 只能通过公共方法访问 System.out.println(demo.getPrivateField()); demo.callPrivateMethod(); } }使用场景类的内部状态、实现细节需要完全隐藏的数据。3. 访问权限总结表访问修饰符同一类中同一包中不同包子类不同包非子类public✅✅✅✅protected✅✅✅❌default✅✅❌❌private✅❌❌❌4. 使用原则与最佳实践4.1 最小权限原则为成员分配尽可能严格的访问权限。如果不确定应该使用哪种权限从private开始然后根据需要逐步放宽。4.2 封装与数据隐藏使用private修饰字段通过公共的 getter 和 setter 方法提供受控的访问这是实现封装的标准做法。public class Student { private String name; private int age; // Getter 和 Setter public String getName() { return name; } public void setName(String name) { if (name ! null !name.trim().isEmpty()) { this.name name; } } public int getAge() { return age; } public void setAge(int age) { if (age 0 age 150) { this.age age; } } }4.3 继承设计如果希望方法被子类覆盖但不希望对外公开使用protected。这为子类提供了扩展点同时隐藏了实现细节。4.4 包设计将功能相关的类放在同一个包中使用default访问权限保护包内实现细节对外只暴露必要的publicAPI。5. 常见问题与注意事项5.1 外部类只能使用 public 或 default顶层类非内部类只能使用public或default访问修饰符不能使用protected或private。5.2 接口成员默认为 public接口中的方法默认是public abstract字段默认是public static final。虽然可以显式指定public但通常省略。5.3 构造函数的访问权限构造函数也可以使用访问修饰符控制对象的创建public任何类都可以创建实例protected同一包或子类可以创建实例default同一包内可以创建实例private常用于单例模式或工具类防止外部实例化5.4 访问权限与继承子类覆盖父类方法时不能降低访问权限可以保持或提高父类public→ 子类必须public父类protected→ 子类可以是protected或public父类default→ 子类可以是default、protected或public但只能在同包中继承父类private→ 不能继承因此也不存在覆盖6. 总结Java 的访问权限控制符是构建健壮、可维护面向对象系统的基石。正确使用这些修饰符可以实现良好的封装、清晰的 API 边界和安全的继承体系。记住从最严格的权限开始只在必要时放宽这是编写高质量 Java 代码的重要原则。
延伸阅读

更多相关文章

2026/11/2 3:27:42

书法老师线上转型:不用租场地,轻资产做线上课程的方法

对于很多深耕线下的书法老师来说,近几年的办学压力越来越明显:场地租金逐年上涨,生源受社区周边范围限制,旺季淡季收入差距大,单靠线下授课的收入天花板清晰可见。也正因如此,越来越多书法老师开始转向线上…

2026/11/3 21:17:22

信息学奥赛递推算法 1313 题:3步构建偶数个3数字计数模型

信息学奥赛递推算法精解:构建偶数个3数字计数模型的实战指南1. 递推算法基础与问题建模递推算法是信息学竞赛中解决计数问题的利器,其核心思想是通过已知的小规模问题解来推导大规模问题的解。在解决"统计n位数中偶数个3的数字数量"这类问题时…

2026/11/7 20:30:10

电工证分分几种类别的,全国通用的怎么考最靠谱

电工证分分几种类别的,全国通用的怎么考最靠谱 你是不是也在为“电工证分分几种类别的”这个问题发愁?在网上一搜,信息太多又太乱,不知道哪个靠谱,怕被中介骗钱、浪费时间。别急,今天我就用从业10年经验,给你讲讲电工证到底是怎么分的、全国通用的怎…

2026/11/7 20:30:10

电工证 几年一审合格标准与通过率

电工证几年一审2026河南最新政策解读:怕考不过白交培训费? 怕考不过白交培训费?2026年河南最新政策明确,电工证几年一审、复审流程、考试标准全在这里,别再被培训机构忽悠! 电工证几年一审?2026河南最新政策怎么说?…

2026/11/7 20:30:10

荆门考电工证在哪学保姆级教程:工地太忙根本没时间复习考试

荆门考电工证在哪学保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是许多在荆门从事建筑行业的电工朋友的真实写照。尤其是像许昌的在职建筑工人,每天工作时间长、任务重,抽不出时间准备电工证考试,这让很多工友感到焦虑。别急,…

2026/11/7 20:30:10

电工证几月份可以报名千万别踩坑

电工证几月份可以报名千万别踩坑 实操考试心里没底怕挂科,尤其是像你这样刚毕业的周口应届生,面对电工证报名时间、考试流程和内容一无所知,很容易在报考过程中踩坑。别急,下面我从报名时间、考试内容、证书价值、备考建议等方面,帮你理清思路,避免走弯…

2026/11/7 20:25:09

你学历不高怕报不上名?红河蒙自高压电工证网上查询流程全解析

你学历不高怕报不上名?红河蒙自高压电工证网上查询流程全解析 你学历不高怕报不上名?其实红河蒙自高压电工证报考门槛没你想象的那么高,关键是你得知道怎么网上查询和准备资料。今天我就从商丘转岗从业者角度,把红河蒙自高压电工证的整个流程讲明白,让你…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑