前言
今天在想办法给我一个好朋友讲权限问题的时候,我想了很久,说每个区别可能会让他似懂非懂,于是用代码来解析。
正文
首先看一下我的工程结构:
代码非常的简单:1.MainClass
public class MainClass {
//这里加上static的原因是main方法为static方法,因此必须调用static变量,看不懂先不用管,就当不存在static
private static String privateName = "privateName";
public static String publicName = "publicName";
protected static String protectedName = "protectedName";
static String defaultName = "defaultName";
//该方法在MainClass内部,属于类属性,类内可调用所有属性
public static void main(String[] args) {
System.out.println("privateName:" + privateName);
System.out.println("publicName:" + publicName);
System.out.println("protectedName:" + protectedName);
System.out.println("defaultName:" + defaultName);
}
}
MainClassOut
public class MainClassOut {
//此时为mainclass外,但是在parse包内,属于本包权限,private只能自己类访问,因此不能被访问,其他可以
public static void main(String[] args) {
//System.out.println("privateName:" + MainClass.privateName);//这里报错,可以取消看看
System.out.println("publicName:" + MainClass.publicName);//public所有都能访问
System.out.println("protectedName:" + MainClass.protectedName);//包内权限可访问
System.out.println("defaultName:" + MainClass.defaultName);//包内权限可访问
}
}
MainClassSon
public class MainClassSon extends MainClass{
//extends表示继承,就是子类son是mainclass的儿子
public static void main(String[] args) {
//System.out.println("privateName:" + MainClassSon.privateName);//这里报错,取消看看
System.out.println("publicName:" + MainClassSon.publicName);
System.out.println("protectedName:" + MainClassSon.protectedName);
System.out.println("defaultName:" + MainClassSon.defaultName);//这里能够访问是因为还在parse包内
}
}
MainClassSon2
public class MainClassSon2 extends MainClass {
//extends表示继承,就是子类son是mainclass的儿子
public static void main(String[] args) {
//System.out.println("privateName:" + MainClassSon.privateName);//这里报错,取消看看
System.out.println("publicName:" + MainClassSon.publicName);
System.out.println("protectedName:" + MainClassSon.protectedName);//子类可访问
//System.out.println("defaultName:" + MainClassSon.defaultName);//这里不能够访问是因为不在parse包内,并且是子类
}
}
Test
public class Test {
//extends表示继承,就是子类son是mainclass的儿子
public static void main(String[] args) {
//System.out.println("privateName:" + MainClassSon.privateName);//这里报错,取消看看
System.out.println("publicName:" + MainClassSon.publicName);
//System.out.println("protectedName:" + MainClassSon.protectedName);//非子类
//System.out.println("defaultName:" + MainClassSon.defaultName);//这里能够访问是因为还在parse包内
}
}
如上,自行注释掉的为报错字段;有需要这自行解除观看效果!!
积土成山,风雨兴焉!!!