发布时间:2026/7/12 4:02:12
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/7/12 3:57:12

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

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

2026/7/12 3:57:12

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

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

2026/7/12 5:02:21

可微分物理仿真:让牛顿定律支持梯度下降

1. 项目概述:当物理仿真不再“不可导”,工程师终于能用梯度下降调参了你有没有试过在训练一个控制机械臂抓取物体的强化学习模型时,卡在仿真环境里动弹不得?明明物理引擎跑得飞快,但一想让策略网络通过反向传播去优化动…

2026/7/12 5:02:21

C++17结构化绑定精解:数组与元组实战应用与性能优化

1. 项目概述&#xff1a;为什么我们需要结构化绑定&#xff1f; 如果你写过C&#xff0c;尤其是处理过 std::pair 、 std::tuple 或者原生数组&#xff0c;下面这种代码你一定不陌生&#xff1a; std::tuple<int, std::string, double> getSensorData() {return {4…

2026/7/12 5:02:21

NVIDIA与d-Matrix异构计算:AI推理10倍性能提升的混合架构解析

这次我们来看一个AI芯片领域的重要合作&#xff1a;NVIDIA与d-Matrix联手打造混合算力基础设施。这个合作的核心不是简单的技术叠加&#xff0c;而是通过异构计算架构解决AI推理中的关键瓶颈问题。从公开信息看&#xff0c;这个混合架构已经通过Neocloud企业Parasail进行了实际…

2026/7/12 4:57:21

苍穹外卖day13

自己写 菜品批量删除controllerDeleteMapping ApiOperation("菜品删除") public Result delete(String ids){log.info("菜品删除{}", ids);dishService.delete(ids);return Result.success(); }问题:RequestParam&#xff1a;从 URL 参数 中取值&#xff0…

2026/7/12 0:01:29

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由&#xff1a;ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/12 0:01:29

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统&#xff1a;3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展&#xff0c;充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本&#xff0c;对充电机与电动汽车之间的通信提出了更严格…

2026/7/12 0:01:29

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动&#xff1a;从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗&#xff1f;&#x1f…

2026/7/12 0:01:29

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由&#xff1a;ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/12 0:01:29

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统&#xff1a;3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展&#xff0c;充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本&#xff0c;对充电机与电动汽车之间的通信提出了更严格…

2026/7/12 0:01:29

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动&#xff1a;从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗&#xff1f;&#x1f…

2026/7/11 8:37:53

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…