常见的访问修饰符的使用权限分类:
类内部 | 本包 | 子类 | 外部包 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default (缺省) | √ | √ | × | × |
private | √ | × | × | × |
其中,对于类的修饰,只能是 public 或者缺省。
对于方法和成员变更的修饰,public是最宽容的,比较难理解的是projected。
package a1;
public class ProTest { protected void say(){ System.out.println("Proteced say"); } public void laugh(){ System.out.println("Protest laugh"); } }
对于不在同一个包的类:是无法访问protected修饰的say()方法的,但可以访问 laugh();
对于子类若不在同一个包中,只能在本类中访问父类的protected方法
package a2; import a1.ProTest; public class Tester { public static void main(String arg[]){ ProTest p = new ProTest(); p.laugh();//ok p.say();//编译器提示无法访问 } }
package a2; public class Effect extends ProTest { public static void main(String args[]){ ProTest p = new ProTest(); p.say();// ok
} }