public
公共,加上这个修饰的属性和方法,可以在程序的任何其它地方访问
private
私有的,和public相反,加上这个修饰的属性和方法,只允许在自己本身这个类里访问,程序的任何其它地方都不能访问
protected
保护,位于public和private中间,加上这个修饰的属性和方法,只能在子类(extends)和同包下的程序访问,别的的地方不能访问。
还有一个默认缺省的(就是不加任何修饰的)
缺省,位于private和protected中间,加上这个修饰的属性和方法,只能在同包下的程序访问,别的的地方不能访问。
结论是:public > protected > 默认 > private
public和private相对简单,默认和protected接下来我们用四个简单的java类来验证一下
package org.test;
public class ChildOne {
static int money;
protected static String family;
}
package org.test;
public class ChildTwo {
public static void main(String[] args) {
// 能访问同包下类的默认属性
System.out.println(ChildOne.money);// YES
// 能访问同包下类的protected属性
System.out.println(ChildOne.family);// YES
}
}
package org.test1;
import org.test.ChildOne;
public class SonOne {
public static void main(String[] args) {
// 在不同包下不能访问非父类默认属性
System.out.println(ChildOne.money);// ERROR
// 在不同包下不能访问非父类protected属性
System.out.println(ChildOne.family);// ERROR
}
}
package org.test1;
import org.test.ChildOne;
public class SonTwo extends ChildOne {
public static void main(String[] args) {
// 在不同包下不能访父类默认属性
System.out.println(ChildOne.money);// ERROR
// 在不同包下能访问父类protected属性
System.out.println(ChildOne.family);// YES
}
}