JAVA(2)之关于类的访问权限控制

  • 类的成员的四种访问权限
    • private
      • 只能在当前类中访问
    • 无修饰
      • 同一个包中的类都可以访问
    • protected
      • 同一个包中的类可以访问
      • 不同包中的子类可以访问
    • public
      • 所有类都可以访问
  • 示例代码
    • 同包
      •  
        1 package com.study.main;
        //同包非子类

        3 public class Two 4 { 5 private int a; 6 protected int b; 7 public int c; 8 int d; 9 }
      •  
        package com.study.main;
        //同包子类
        public class Son extends Main
        {
        
        }

      •  1 package com.study.main;
         2 //测试类
         3 import com.study.one.One;
         4 import com.study.one.SonOne;
         5 
         6 public class Main
         7 {
         8     private int a;
         9     protected int b;
        10     public int c;
        11     int d;
        12 
        13     public static void main(String[] args)
        14     {
        15         Main m = new Main();//同一类
        16         System.out.println("同一类");
        17         System.out.println(m.a);//private
        18         System.out.println(m.b);//protected
        19         System.out.println(m.c);//public
        20         System.out.println(m.d);//无修饰
        21         
        22         Son s = new Son();//同一包中的子类
        23         System.out.println("同一包中的子类");
        24 //        System.out.println(s.a);//private无法访问
        25         System.out.println(s.b);//protected
        26         System.out.println(s.c);//public
        27         System.out.println(s.d);//无修饰
        28         
        29         Two t = new Two();//同一包中的非子类
        30         System.out.println("同一包中的非子类");
        31 //        System.out.println(t.a);//private无法访问
        32         System.out.println(t.b);//protected
        33         System.out.println(t.c);//public
        34         System.out.println(t.d);//无修饰
        35         
        36         SonOne so = new SonOne();//不同包中的子类
        37         System.out.println("不同包中的子类");
        38 //        System.out.println(so.a);//private无法访问
        39         System.out.println(so.b);//protected
        40         System.out.println(so.c);//public
        41 //        System.out.println(so.d);//无修饰无法访问
        42         
        43         
        44         One o = new One();//不同包中的非子类
        45         System.out.println("不同包中的非子类");
        46 //        System.out.println(o.a);//private无法访问
        47 //        System.out.println(o.b);//protected无法访问
        48         System.out.println(o.c);//public
        49 //        System.out.println(o.d);//无修饰无法访问
        50         
        51         
        52     }
        53 }
    • 不同包
      •   
        package com.study.one;
        //不同包非子类
        public class One
        {
            private int a;
            protected int b;
            public int c;
             int d;
        }
      • 1 package com.study.one;
        2 //不同包子类
        3 import com.study.main.Main;
        4 
        5 public class SonOne extends Main
        6 {
        7 
        8 }
    • 运行截图

      •   
  • 总结
    • 当前类的都可以访问
    • 同一个包中的类除了private不能访问
    • 不同包中的子类只有public和protected可以访问
    • 不同包中的非子类只有public可以访问
原文地址:https://www.cnblogs.com/quxiangjia/p/11911421.html