java权限控制

访问权限分为

public:共有的,可供所有类访问在那都可以访问,这个就不写代码演示了。

default

默认的修饰符,同一个包内可以访问
同包情况:

package com.test.ThinkInJava.access;

public class TestAccess {

    String s="";//默认修饰 defualt修饰的 s变量

    public TestAccess() {

    }

    void testAccess(){//默认修饰符 defualt修饰的方法
        System.out.println("TestAccess------------"+s);
    }

}

测试代码:

package com.test.ThinkInJava.access;

public class AccessMain {

    public AccessMain() {

    }

    public static void main(String[] args) {
        TestAccess test=new TestAccess();
        test.s="测试defualt访问权限--同包";//同包中修改变量s的值
        test.testAccess();//同包调用defualt修饰的方法
    }

}

输出结果:
**TestAccess————测试defualt访问权限–同包
**

不同包情况:
TestAccess.s在这个区域是不可见的

报错信息是:TestAccess.s在这个区域是不可见的,提示方法也是不可见的,

protected

被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

实例:

package com.test.ThinkInJava.access;

public class TestAccess {

    protected String s="";

    public TestAccess() {

    }

    protected void testAccess(){
        System.out.println("TestAccess------------"+s);
    }

}

测试代码:

package com.test.ThinkInJava.access;

public class AccessMain {

    public AccessMain() {

    }

    public static void main(String[] args) {
        TestAccess test=new TestAccess();
        test.s="测试protected访问权限--同包";
        test.testAccess();
    }

}

输出结果:
TestAccess————测试protected访问权限–同包

不同包情况跟defualt情况是相同的,也是不可见的。

不同包的子类:程序稍做修改TestAthPackage继承与TestAccess在TestAthPackage就可以访问其父类的属性与方法。

package com.test.ThinkInJava.access.othPackage;

import com.test.ThinkInJava.access.TestAccess;

public class TestAthPackage extends TestAccess {//继承父类

    public TestAthPackage() {

    }

    public static void main(String[] args) {
        TestAthPackage test=new TestAthPackage();//创建本类对象
        test.s="测试defualt访问权限--非同包";//多态调用其父类protected属性(多态后续会有讲解)
        test.testAccess();//调用父类protected方法
    }

}

输出结果:
TestAccess————测试defualt访问权限–非同包

private

私有的, Java语言中对访问权限限制的最窄的修饰符,可以修饰内部类和变量,可以修饰非静态方法。修饰的变量与方法是不可被继承的

修饰内部类

public class TestAccess {

    public TestAccess() {

    }

    public void testAccess(){
        AccessSon son=new AccessSon();
        son.s="AccessSon的s变量";
        son.test();
    }

    private class AccessSon{//private 修饰的内部累
        public String s;//公有属性
        private void test(){//私有方法
            System.out.println("AccessSon--------"+s);
        }
    }
}

测试程序

public class AccessMain {

    public AccessMain() {

    }

    public static void main(String[] args) {
        TestAccess test=new TestAccess();
        test.testAccess();
    }

}

输出结果:
AccessSon——–AccessSon的s变量
内部类的私有方法只能在外部类中通过内部类对象调用,不能在其他类中直接创建私有内部类,

网上找的一个对照表,如下:
这里写图片描述

更多文章请扫码关注微信公众号。
期待您的加入

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值