首先按照权限从上到下的顺序排序
public 任何地方都可以访问,对访问无限制
protected 同一个包内或者不同包内的子类可以访问
default(默认省略) 同一个包内可以访问
private 同一个类可以访问
表格如下:
限定符 | 类内部 | 本包 | 子类 | 外部包 |
---|---|---|---|---|
public | 是 | 是 | 是 | 是 |
protected | 是 | 是 | 是 | 否 |
default | 是 | 是 | 否 | 否 |
private | 是 | 否 | 否 | 否 |
代码如下:
/**
* @author wzq
* @date 2018/12/27 上午11:43
* @desc 最基本的一个类(被调用属性的一个类,分别定义了四个不同权限的属性)
*/
public class Packet1Example {
public int mPublic;
protected int mProtected;
int mDefault;
private int mPrivate;
}
/**
* @author wzq
* @date 2018/12/27 上午11:47
* @desc 一个相同包内的类, 尝试去获取Example类里面的属性
*/
public class Packet1Test {
private Packet1Test() {
Packet1Example packet1Example = new Packet1Example();
int a = packet1Example.mPublic;
int b = packet1Example.mProtected;
int c = packet1Example.mDefault;
}
}
/**
* @author wzq
* @date 2018/12/27 上午11:49
* @desc 一个相同包内的类, 尝试去获取Example类里面的属性
*/
public class Packet2Test {
private Packet2Test() {
Packet1Example packet1Example = new Packet1Example();
int a = packet1Example.mPublic;
}
}
/**
* @author wzq
* @date 2018/12/27 上午11:51
* @desc 一个不同包的继承自Example的子类,尝试去获取Example的属性
*/
public class Packet2SonTest extends Packet1Example {
private Packet2SonTest() {
int a = mPublic;
int b = mProtected;
}
}