Java中权限修饰符的权限范围

时间:2021-07-15 16:47:02
关键字 类内部 相同包类 不同包类
public 可存取 可存取 可存取
protected 可存取 可存取 子类可存取
可存取 可存取 不可存取
private 可存取 不可存取 不可存取

提示>>>简单来说,依权限大小来区分,就是private、无关键字、protected与public,设计时要使用哪个权限,是依经验或团队讨论而定,如果一开始不知道使用哪个权限,就先使用private,以后视需求再开放权限。

1、public
public权限不论在类内部,相同的包内部,还是在不同的包之间都能够使用。
2、protected
protected权限主要是用来保护子类的,被protected修饰的成员对于本包和其子类可见。
1⃣️基类的protected成员是包内可见的,并且对子类可见;
2⃣️若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
3、
未声明权限修饰符表示包内友好,表示在同一个包内或同一个.java文件中都能使用,在不同的包内不能使用。
4、private
private权限仅限于在定义它的类内使用,其他地方都不能访问private成员,是一种封装的体现。
只有这个类的内部可以访问:
a、类内部指类的成员函数和定义初始化
b、这个限制是对类的而不是对对象

class Fraction{
    private int a;
    ……
    public void show(Fraction r){
        System.out.println(r.a);
    }
    ……
}

上述代码中在函数show中访问了对象r对私有成员,但是代码是正确对,可以编译实现的。
这就是上面所讲的第二点,private的限制是对类的而不是对对象。即我使用对象r的私有成员a是在类Fraction内部,所以语法上是正确的。而如果我在其他类中直接访问对象r的私有成a,则会出现语法错误。