Java访问权限的修饰符public,private,protected,缺省(default)
一个类中的成员变量和成员方法(非静态)被访问分为两种场景,一是在该类中,或其子类中访问,二是创建该类的对象进行访问。
假设:有三个类 class A ,class B extends C,class C
一、在类中访问
首先,在B类中,可以访问到B类中定义的任意权限的成员变量/方法。然后C类中哪些成员变量/方法可以被访问,需要根据B和C是否在同一个包内来看。如果同包,则可以访问的权限有,public,缺省,protected。否则,访问的权限只有public,protected。
总结:B继承C,B可以访问C内成员变量的权限。
访问权限 | 同包 | 不同包 |
public | Y | Y |
protected | Y | Y |
缺省 | Y | N |
private | N | N |
二、对象的访问权限
假设在A类中创建了对象B,那么可以访问到B以及B继承的类(这里是C)中哪些权限的成员变量/方法。这个必须根据A,B,C所在包的情况判断。
访问权限 | A,B,C同包 | A,B同包 | A,C同包 | A与BC不同包 |
public | B,C | B,C | B,C | B,C |
protected | B,C | B | C | |
缺省 | B,C | B | ||
private |