java权限控制

来源:互联网 发布:速卖通软件 编辑:程序博客网 时间:2024/06/15 18:36

访问权限分为

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变量
内部类的私有方法只能在外部类中通过内部类对象调用,不能在其他类中直接创建私有内部类,

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

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

0 0