本篇文章主要介绍Java中的访问权限修饰符,对应的有4个权限修饰关键字,每一个的用法都是需要我们掌握的。
访问权限修饰符
本类 | 本包 | 子类 | 其他类 | |
---|---|---|---|---|
private | ✔️ | |||
默认 | ✔️ | ✔️ | ||
protected | ✔️ | ✔️ | ✔️ | |
public | ✔️ | ✔️ | ✔️ | ✔️ |
具体说明如下:
private
表示私有的意思,被它修饰的内容只能在本类中使用。
默认
什么都不写就是默认,被它修饰的内容既可以在本类中使用还可以在本包下的其它类来使用。
protected
表示受保护的意思,被它修饰的内容既可以在本类中来使用,也可以在本包下的其它类来使用,还可以在不同包下的子类中来使用
public
表示公共的、公开的,被它修饰的内容既可以在本类中、本包下的其它类中、在不同包下的子类中可以用,在其它类下也可以用
- public强调的是给大家使用
单看上面的图,大家还是无法很好的理解,下面👇开始写代码来带着大家更好的去理解。
示例代码:
public class Father {
private void show1() {
System.out.println("private show1");
}
void show2() {
System.out.println("默认 show2");
}
protected void show3() {
System.out.println("protected show3");
}
public void show4() {
System.out.println("public show4");
}
}
同一个类
对应在里面写main函数
进行验证,可以看到都能调用成功并打印。
也就是说,在同一类中无论使用哪个权限修饰符,对应都可以访问并打印成功
四大权限修饰符
本类 同包下的其他类 同包下的子类 不同包下的其他类 不同包下的子类
同一个类 | |
---|---|
private | ✔️ |
默认 | ✔️ |
protected | ✔️ |
public | ✔️ |
同一个包
无关类
同一个包下创建没有关系的其它类进行验证。
同一个包下的调用,对应private修饰的方法会报错,注释掉后,其它方法都可以访问
同一个类 | 同一个包无关类 | |
---|---|---|
private | ✔️ | |
默认 | ✔️ | ✔️ |
protected | ✔️ | ✔️ |
public | ✔️ | ✔️ |
子类
同一个包下创建子类进行验证。
同一个包下,哪怕是继承关系,对应的父类私有方法也是无法 进行调用。
哪怕是自己调用父类的方法,对应的私有方法也是无法调用
总结:同包下的类,用
private
修饰的,无论是否是继承关系「是否是子类」,都无法进行调用。但是用其它权限修饰符修饰的方法都可以被调用
同一个类 | 同一个包无关类 | 同一个包子类 | |
---|---|---|---|
private | ✔️ | ||
默认 | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ✔️ |
public | ✔️ | ✔️ | ✔️ |
不同包
不同包下的子类
不同包下的子类,可以访问
protected
和public
同一个类 | 同一个包无关类 | 同一个包子类 | 不同包下的子类 | |
---|---|---|---|---|
private | ✔️ | |||
默认 | ✔️ | ✔️ | ✔️ | |
protected | ✔️ | ✔️ | ✔️ | ✔️ |
public | ✔️ | ✔️ | ✔️ | ✔️ |
不同包下的无关类
package top.testeru.keywords.otherperp;
import top.testeru.keywords.permissionp.Father;
public class PermissonTestDemo {
public static void main(String[] args) {
Father father = new Father();
father.show4();//只能访问4
}
}
不同包下的无关类只能访问
public
同一个类 | 同一个包无关类 | 同一个包子类 | 不同包下的子类 | 不同包下的无关类 | |
---|---|---|---|---|---|
private | ✔️ | ||||
默认 | ✔️ | ✔️ | ✔️ | ||
protected | ✔️ | ✔️ | ✔️ | ✔️ | |
public | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
总结
private
:强调的是给自己使用默认
:强调的是给同包下的类使用protected
:强调的是给子类使用,不管是否在同一个包下的子类public
:强调的是给大家使用
这就是为什么成员方法都是用
public
修饰的「set,get方法」,成员变量用private
修饰