java代码解释private、public、default、protected权限

前言

今天在想办法给我一个好朋友讲权限问题的时候,我想了很久,说每个区别可能会让他似懂非懂,于是用代码来解析。

正文

首先看一下我的工程结构:

结构图 

代码非常的简单: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包内
        }
}

 如上,自行注释掉的为报错字段;有需要这自行解除观看效果!!

 

积土成山,风雨兴焉!!!

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值