public,protected,private是Java里用来定义成员的访问权限的,另外还有一种是“default”,也就是在成员前不加任何权限修饰符。如:
public class A{
void method(){};
}
method就属于default权限。
这四个修饰符的访问权限如下表:
-----------------------------------------------
类内部 package内 子类 其他
public 允许 允许 允许 允许
protected 允许 允许 允许 不允许
default 允许 允许 不允许 不允许
private 允许 不允许 不允许 不允许
-----------------------------------------------
之前看到很多次这张表,以为自己理解透彻,结果转头就忘记,最后还是做选择题,总是看见,下决心把这个弄清楚。
最迷糊的莫过于包内访问和子类访问:
1. 包内允许访问和子类允许访问的各自含义:
a. 包类允许访问是指通过实例化类,来访问;
b.子类允许访问的意思是能直接使用父类的变量。如果通过实例化父类访问,属于包类访问。
2. 对1理解之后,很自然的,
a. 包外的子类可以直接使用父类的protected public 修饰的变量或者方法。
b. 但是不能通过实例化类之后访问protected修饰的成员变量。
c. 若某个子类A被调用,A继承的protected 变量或者方法对调用类A的外部不可见。