Java 权限修饰符有哪些
在日常写代码的时候,你肯定见过那些带private、public的关键字,比如想把一个变量藏起来不让其他代码随便改,就会在前面加个private;想让大家都能调用的方法,就用public。这些就是Java里的权限修饰符,相当于给代码元素“穿”了不同的门禁卡,只有符合条件的代码才能“进门”操作。
什么是权限修饰符?
简单说,权限修饰符就是Java给类、变量、方法这些代码元素设的“访问门槛”——你想让谁能访问,就给它配对应的“门禁规则”,比如“只有自己家能用”“同小区的人能用”“整个城市的人能用”,避免无关代码乱改重要数据,就像你家的保险柜,只有你自己能开,不会被外人随便碰。

常用的4种权限修饰符
Java常用的权限修饰符一共4种,从“最严格”到“最宽松”排,咱们用生活化的例子一个个说:
private:只允许“自己人”用
private是最严的规则,相当于“只给本类内部用”。比如你写了一个“学生”类,里面有个“考试分数”的变量,这个分数是学生的隐私,不能让其他类随便改,也不能让外界直接看——这时候就给这个变量加private。
举个例子:
`java
class Student {
// 分数设为private,只有Student类自己能访问
private int score = 90;
// 本类内部的方法,能访问private变量
public void printScore() {
System.out.println("你的分数是:" + score);
}
}
`
如果你在另一个类里想直接写Student s = new Student(); s.score = 100;,编译器就会报错——因为score是private,只有Student类自己能碰。
默认(无修饰符):同“小区”的人能用
默认修饰符不用写任何关键字,规则是“本类、同一个包(可以理解为同个文件夹的代码)里的类能用”。还是拿学生类举例,如果你想让同个项目里的其他工具类(比如“成绩统计类”)能读取学生的基本信息,但不能跨项目用,就把信息变量设为默认。
比如把学生的“学号”设为默认:
`java
class Student {
// 默认修饰符,同包的类能访问,跨包不行
String studentId = "2024001";
}
`
如果另一个和Student在同个包的类里,写Student s = new Student(); System.out.println(s.studentId);就没问题;但如果在另一个包的类里这么写,就会报错。
protected:同“小区”+“自家亲戚”能用
protected的规则是“本类、同包的类,还有子类(相当于继承的‘亲戚’)能用”。还是用学生类,如果你想让“学生的子类”(比如“研究生”类,继承了学生的属性)能访问“导师信息”,但不让无关类用,就用protected。
`java
class Student {
// protected修饰符,同包类和子类都能访问
protected String tutor = "张老师";
}
// 研究生类继承了学生类
class GraduateStudent extends Student {
public void printTutor() {
// 子类能访问protected的tutor
System.out.println("你的导师是:" + tutor);
}
}
`
要是在另一个包的子类里想直接访问tutor,虽然是子类,但跨了包也不行,这就是protected的边界。
public:所有人都能用
public是最宽松的规则,相当于“全公开”,不管哪个类、哪个包,都能访问。比如你写了一个“计算工具类”,里面的“加法方法”是给整个项目用的,就用public修饰。
`java
// 整个类设为public,其他所有类都能创建这个类的对象
public class Calculator {
// public方法,任何人都能调用
public int add(int a, int b) {
return a + b;
}
}
`
不管你在项目的哪个包,只要导入了这个类,就能写Calculator c = new Calculator(); c.add(2,3);,完全没问题。
为啥要分清权限修饰符?
很多新手可能觉得“全都用public不就好了?”,但其实这是代码写得乱的根源——如果把所有变量都设为public,其他类随便改你的数据,很容易出bug。比如学生的分数被随便改成0,程序就出错了;而用private把变量藏起来,只给外部留“合法的修改入口”(比如设一个public的setScore方法,只能改合理范围的分数),代码才更安全、更容易维护。
简单总结下:private藏隐私,同包用默认,子类加protected,公开功能用public,按需求选对修饰符,就能写出更规整的Java代码。