Java提供了许多访问修饰符来设置类,变量,方法和构造函数的访问级别。 四个访问级别是:public, default, protected, private.
四个访问修饰符的访问权限如下图所示:

口诀:地球人都能用。
例如: 包结构图如下:

//cn.Father.java////////////////////////////////
package cn;
public class Father {
public Father(){
}
public int number = 100;
}
//net.Anonymouse.java///////////////////////////
package net;
import cn.Father;
public class Anonymous {
public static void main(String[] args) {
Father f = new Father();
System.out.println(f.number); //非同包,非子类也可以访问。
}
}
运行结果:
100
例如:
包结构图如下:

//cn.Father.java////////////////////////////////
public class Father {
public Father(){
}
public int number = 100;
int age = 50;
}
//cn.Brother.java///////////////////////////////////
package cn;
public class Brother {
public static void main(String[] args) {
Father f = new Father();
System.out.println(f.age); //同包类可以访问default属性。
}
}
//com.Other.java//////////////////////////////////////
package com;
import cn.Father;
public class Other {
public static void main(String[] args) {
Father f = new Father();
System.out.println(f.age); //非同包类无法访问default属性
}
}
例如:
包结构图如下:

//cn.Father.java/////////////////////////////
package cn;
public class Father {
public Father(){
}
public int number = 100;
int age = 50;
protected int money = 1000;
}
//net.Son.java///////////////////////////////
package net;
import cn.Father;
public class Son extends Father {
public static void main(String[] args) {
Son s = new Son();
System.out.println(s.money); //非同包的子类可以继承父类的protected属性。
}
}
//net.Anonymouse.java//////////////////////////
package net;
import cn.Father;
public class Anonymous {
public static void main(String[] args) {
Father f = new Father();
System.out.println(f.money);//非同包的非子类不能访问。
}
}
口诀:离开了本类,谁也别想用。
例如:
包结构图如下:

//cn.Father.java/////////////////////////////////////
package cn;
public class Father {
public Father(){
}
public int number = 100;
int age = 50;
protected int money = 1000;
private String secret = "我的密码";
public static void main(String[] args) {
Father f = new Father();
System.out.println(f.secret); //只有本类可以访问。
}
}
//cn.Mother.java///////////////////////////////////////
package cn;
public class Mother {
public static void main(String[] args) {
Father f = new Father();
System.out.println(f.secret); //即便是妻子(同包类)或者同包子类也无法访问,
}
}
java对应有四种不同的访问权限修饰符,其中public和private最好理解。public就是地球人都能用,private就是只能自己使用,即便是自己兄弟姊妹,儿子都不行。protected通常用在希望子类能继承的属性,default较少使用,可以简单理解为同包可以访问。
学习过程中大家没有必要死记硬背这些修饰符的权限范围,遇到具体问题完全可以通过代码亲自试验,从而得出正确的结论!