当前位置: 首页 > ds >正文

Java四种访问权限修饰符详解

1. 权限修饰符

Java 中的访问权限修饰符有以下四种:

  • public
  • protected
  • default(默认,不写)
  • private

它们决定了类、接口、方法和变量在不同范围内的可见性。


2. 权限修饰符可修饰的内容

可修饰项可用修饰符
publicdefault
接口publicdefault
方法publicprotecteddefaultprivate
变量publicprotecteddefaultprivate

⚠️ 注意:

  • 局部变量、方法参数、构造器参数不能使用访问权限修饰符。
  • 类和接口只能使用 publicdefault

3. 访问权限分类

范围publicprotecteddefaultprivate
同一个类
同一个包
不同包子类
其他类

4. 访问权限举例说明

4.1 public - 任意类

public 成员可以在任意类中访问,不受包和继承关系限制。

public class Animal {public void speak() {System.out.println("Animal speaks");}
}public class Test {public static void main(String[] args) {Animal animal = new Animal();animal.speak(); // 正常调用}
}

4.2 protected - 同包 / 不同包子类

protected 成员可以被:

  • 同一包中的所有类访问;
  • 不同包中的子类访问(通过继承)。
示例结构
com.example.animal└── Animal.java
com.example.child└── Child.java
Animal.java
package com.example.animal;public class Animal {protected String name = "Animal";protected void sayHello() {System.out.println("Hello from " + name);}
}
Child.java
package com.example.child;import com.example.animal.Animal;public class Child extends Animal {public void showInfo() {System.out.println(name); // 子类访问 protected 字段sayHello();               // 子类访问 protected 方法}
}

4.3 default - 同包

没有显式指定访问权限时,默认为 default。该成员只能在定义它的包内访问。

示例结构
com.example.animal└── Animal.java└── Dog.java
com.example.other└── OtherClass.java
Animal.java
package com.example.animal;class Animal { // 默认访问权限String name = "Animal";void display() {System.out.println("This is an " + name);}
}
Dog.java
package com.example.animal;public class Dog {public void showName() {Animal animal = new Animal();System.out.println(animal.name); // 同包下可访问animal.display();                // 同包下可访问}
}
OtherClass.java(不同包)
package com.example.other;import com.example.animal.Animal;public class OtherClass {public void tryAccess() {Animal animal = new Animal();// 编译错误:无法访问 default 成员// System.out.println(animal.name);// animal.display();}
}

4.4 private - 同类

private 是最严格的访问控制级别,只能在定义它的类内部访问,对外完全隐藏。

示例代码
public class Person {private String name = "John";private void sayHello() {System.out.println("Hello, my name is " + name);}public void introduce() {sayHello(); // 同类中可以访问}public static void main(String[] args) {Person p = new Person();p.introduce(); // 正常调用}
}
外部类访问失败示例
public class OtherClass {public void accessPrivate() {Person person = new Person();// 下面两行会编译报错// System.out.println(person.name);// person.sayHello();}
}

✅ 总结:

  • private 成员仅能在定义它的类内部访问;
  • 子类、同包类、外部类均无法访问;
  • 常用于封装数据,防止外部直接修改对象状态。

5. 总结对比表

修饰符同类同包子类外部类
public
protected
default
private

http://www.xdnf.cn/news/9901.html

相关文章:

  • 霹雳吧啦Wz_深度学习-图像分类篇章_1.1 卷积神经网络基础_笔记
  • 【MQTT】
  • NUMA 架构科普:双路 CPU 系统是如何构建的?
  • 快速上手shell条件测试
  • Practice 2025.5.29 —— 二叉树进阶面试题(1)
  • 聊聊 Metasploit 免杀
  • 数字人引领政务新风尚:智能设备助力政务服务
  • OpenCV计算机视觉实战(9)——阈值化技术详解
  • 【仿生系统】qwen的仿生机器人解决方案
  • AI产品风向标:从「工具属性」到「认知引擎」的架构跃迁​
  • 国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航
  • Java 实现下载指定minio目录下的所有内容到远程机器
  • ssm学习笔记(尚硅谷) day1
  • 生成式人工智能:重构软件开发的范式革命与未来生态
  • 预处理,咕咕咕
  • Cesium 展示——获取鼠标移动、点击位置的几种方法
  • 第四章、自平衡控制
  • 【Ubuntu远程桌面】
  • .NET WinForm图像识别二维码/条形码
  • 从零开始的数据结构教程(六) 贪心算法
  • 超声波换能器 换能原理
  • 「卫星百科」“绿色守卫”高分六号
  • MVCC 原理与并发控制实现
  • 【Pandas】pandas DataFrame equals
  • STP配置
  • 基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计
  • 代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )
  • Java中如何枚举正则表达式捕获组的名字
  • RabbitMQ项目实战
  • 【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)