关键字 | 类内部 | 相同包类 | 不同包类 |
---|---|---|---|
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,则会出现语法错误。