java之访问权限

java之访问权限

理论

  • public(公共访问控制):可以被所有的类访问,访问畅通无阻。
    • 修饰成员变量:该成员变量对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。如果类之间没有被继承关系,那么不在同一包下,对外暴露。
    • 修饰方法:该方法对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,对外暴露。
  • protect(保护访问控制):可以被这个类本身、它的子类(不管在不在同一个包)、和同一个包中所有其他类访问。
    • 修饰成员变量:该成员变量对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
    • 修饰方法:该方法对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
  • default(友好访问控制):可以被这个类本身和其他类所访问。
    • 修饰成员变量:该成员变量对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
    • 修饰方法:该方法对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
  • private(私有访问控制):
    • 修饰成员变量:不对外暴露,只能通过类的内部方法对已经初始化的对象的属性值修改。
    • 修饰方法:修饰方法也不对外暴露。
    • 如果该类被继承,子类更不必谈对外暴露它的私有方法和属性,只能同过访问对外暴露的方法进行操作。

代码示例:同一包下

  • 目录结构
    在这里插入图片描述

  • Pine

    public class Pine {
    
        private int age;
        protected String sex;
        public String Name;
        String Num;
    
        public String getNum() {
            return Num;
        }
    
        public void setNum(String num) {
            Num = num;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getName() {
            return Name;
        }
    
        public void setName(String name) {
            Name = name;
        }
    
        public void getMar(){
            System.out.println("吸收阳光");
        }
    
        protected void getWater(){
            System.out.println("吸收水分");
        }
        private void getNut(){
            System.out.println("汲取营养");
        }
    
        void getClean(){
            System.out.println("新陈代谢");
        }
    }
    
    
  • RedPine

    public class RedPine extends Pine {
        private String color;
    
        public RedPine(String color) {
            this.color = color;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
    }
    
  • quanxianceshi

    public class quanxianceshi {
    
        public static void main(String[] args) {
    
            Pine p =new Pine();
            p.setAge(20);
            p.setName("小红");
            p.setSex("女");
    
            //本类public成员变量
            System.out.println(p.Name);
            //本类protect成员变量
            System.out.println(p.sex);
            //本类public
            p.getMar();
            //本类protect方法
            p.getWater();
            //
            p.setNum("1234");
    
            RedPine redPine = new RedPine("red");
            redPine.setNum("1234");
            //父类public方法
            redPine.getMar();
            //子类public
            redPine.getColor();
            //父类protect方法
            redPine.getWater();
    
            //同一包友好变量
            System.out.println(p.Num);
            //同一包友好方法
            p.getClean();
    
            //同一包 子类 友好变量
            System.out.println(redPine.Num);
            redPine.getClean();
        }
    }
    
  • 运行结果

    小红
    女
    吸收阳光
    吸收水分
    吸收阳光
    吸收水分
    1234
    新陈代谢
    1234
    新陈代谢
    

代码示例:不在同一包下

  • 目录结构
    在这里插入图片描述

  • A.java

    package A;
    
    public class A {
    
        private int age;
        protected String sex;
        public  String Num;
        int grade;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getNum() {
            return Num;
        }
    
        public void setNum(String num) {
            Num = num;
        }
    
        public int getGrade() {
            return grade;
        }
    
        public void setGrade(int grade) {
            this.grade = grade;
        }
    
        public void getWater(){
            System.out.println("获取水分");
        }
        private void getNur(){
            System.out.println("获取营养");
        }
        void getMar(){
            System.out.println("获取阳光");
        }
    }
    
  • B.java

    package B;
    import A.A;
    public class B {
        public static void main(String[] args) {
            A a =new A();
            a.setAge(12);
            a.setNum("1223");
            a.setSex("女");
    
            //不在同一包下
            System.out.println(a.Num);
            a.getWater();//
        }
    }
    
  • 结果

    1223
    获取水分
    
  • 总结
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值