对java中的访问限定符的理解1

image

 

可以这样理解:

“同一类中可见”------“相对于父类,在父类的{}作用域内,父类的对象可以访问全部的成员”;

“同一包中对子类可见”------“相对于父类,与父类在同一包A中,在包A里面的子类的{}作用域内,父类或者子类的对象访问父类成员的情况”;

“同一包中对非子类可见”------“相对于父类,与父类在同一包A中,在包A里面的非子类的{}作用域内,父类或者子类的对象访问父类的成员的情况”;

“不同包中对子类可见”-------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的子类的{}作用域内,子类的对象,访问父类的成员的情况”;

“不再同一包中对非子类可见”------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的非子类的{}作用域内,父类或者子类的对象,访问父类的成员的情况”;

 

下面一行一行的解释:

一、

image

理解:

“同一类中可见”------“相对于父类,在父类的{}作用域内,父类的对象可以访问全部的成员”;

 

 

示例:

image

 

ClassA.java

 

   1:  package com.test.pkg1;
   2:   
   3:   
   4:   
   5:  public class ClassA {
   6:   
   7:      public int a;
   8:      protected int b;
   9:      int c;
  10:      private int d;
  11:      
  12:      public void fun1(){}
  13:      protected void fun2(){}
  14:      void fun3(){}
  15:      private void fun4(){}
  16:      
  17:      
  18:      public static void main(String[] args) {
  19:          
  20:          ClassA classA = new ClassA();
  21:          
  22:          classA.a = 0;
  23:          classA.b = 0;
  24:          classA.c = 0;
  25:          classA.d = 0;
  26:          
  27:          classA.fun1();
  28:          classA.fun2();
  29:          classA.fun3();
  30:          classA.fun4();
  31:          
  32:      }
  33:      
  34:      
  35:  }
  36:   

 

编译无误!

 

二、image

 

 

理解:

“同一包中对子类可见”------“相对于父类,与父类在同一包A中,在包A里面的子类的{}作用域内,父类或者子类的对象访问父类成员的情况”;

 

image

 

ClassA.java

 

   1:  package com.test.pkg1;
   2:   
   3:   
   4:   
   5:  public class ClassA {
   6:   
   7:      public int a;
   8:      protected int b;
   9:      int c;
  10:      private int d;
  11:      
  12:      public void fun1(){}
  13:      protected void fun2(){}
  14:      void fun3(){}
  15:      private void fun4(){}
  16:      
  17:      
  18:      public static void main(String[] args) {
  19:          
  20:          ClassA classA = new ClassA();
  21:          
  22:          classA.a = 0;
  23:          classA.b = 0;
  24:          classA.c = 0;
  25:          classA.d = 0;
  26:          
  27:          classA.fun1();
  28:          classA.fun2();
  29:          classA.fun3();
  30:          classA.fun4();
  31:          
  32:      }
  33:      
  34:      
  35:  }
  36:   
  37:  class ClassB extends ClassA{
  38:      
  39:      public void fun5()
  40:      {
  41:          ClassA classA = new ClassA();
  42:          ClassB classB = new ClassB();
  43:          
  44:          classA.a = 0;
  45:          classA.b = 0;
  46:          classA.c = 0;
  47:          classA.d = 0;
  48:          
  49:          classA.fun1();
  50:          classA.fun2();
  51:          classA.fun3();
  52:          classA.fun4();
  53:          
  54:          classB.a = 0;
  55:          classB.b = 0;
  56:          classB.c = 0;
  57:          classB.d = 0;
  58:          
  59:          classB.fun1();
  60:          classB.fun2();
  61:          classB.fun3();
  62:          classB.fun4();
  63:      }
  64:  }

下面是系统提示:

image

 

三、

image

 

 

 

理解:

“同一包中对非子类可见”------“相对于父类,与父类在同一包A中,在包A里面的非子类的{}作用域内,父类或者子类的对象访问父类的成员的情况”;

 

image

 

ClassA.java

   1:  package com.test.pkg1;
   2:   
   3:   
   4:   
   5:  public class ClassA {
   6:   
   7:      public int a;
   8:      protected int b;
   9:      int c;
  10:      private int d;
  11:      
  12:      public void fun1(){}
  13:      protected void fun2(){}
  14:      void fun3(){}
  15:      private void fun4(){}
  16:      
  17:      
  18:      public static void main(String[] args) {
  19:          
  20:          ClassA classA = new ClassA();
  21:          
  22:          classA.a = 0;
  23:          classA.b = 0;
  24:          classA.c = 0;
  25:          classA.d = 0;
  26:          
  27:          classA.fun1();
  28:          classA.fun2();
  29:          classA.fun3();
  30:          classA.fun4();
  31:          
  32:      }
  33:      
  34:      
  35:  }
  36:   
  37:  class ClassB extends ClassA{}
  38:   
  39:  class ClassC{
  40:      
  41:      public void fun5()
  42:      {
  43:          ClassA classA = new ClassA();
  44:          ClassB classB = new ClassB();
  45:          
  46:          classA.a = 0;
  47:          classA.b = 0;
  48:          classA.c = 0;
  49:          classA.d = 0;
  50:          
  51:          classA.fun1();
  52:          classA.fun2();
  53:          classA.fun3();
  54:          classA.fun4();
  55:          
  56:          classB.a = 0;
  57:          classB.b = 0;
  58:          classB.c = 0;
  59:          classB.d = 0;
  60:          
  61:          classB.fun1();
  62:          classB.fun2();
  63:          classB.fun3();
  64:          classB.fun4();
  65:      }
  66:  }

下面是系统提示:

image

 

四、image

 

 

理解:

“不同包中对子类可见”-------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的子类的{}作用域内,子类的对象,访问父类的成员的情况”;

 

image

 

ClassA.java

   1:  package com.test.pkg1;
   2:   
   3:   
   4:   
   5:  public class ClassA {
   6:   
   7:      public int a;
   8:      protected int b;
   9:      int c;
  10:      private int d;
  11:      
  12:      public void fun1(){}
  13:      protected void fun2(){}
  14:      void fun3(){}
  15:      private void fun4(){}
  16:      
  17:      
  18:      public static void main(String[] args) {
  19:          
  20:          ClassA classA = new ClassA();
  21:          
  22:          classA.a = 0;
  23:          classA.b = 0;
  24:          classA.c = 0;
  25:          classA.d = 0;
  26:          
  27:          classA.fun1();
  28:          classA.fun2();
  29:          classA.fun3();
  30:          classA.fun4();
  31:          
  32:      }
  33:      
  34:      
  35:  }
  36:   

ClassB.java

   1:  package com.test.pkg2;
   2:   
   3:  import com.test.pkg1.ClassA;
   4:   
   5:   
   6:  class ClassB extends ClassA{
   7:      
   8:      public void fun5()
   9:      {
  10:          ClassA classA = new ClassA();
  11:          ClassB classB = new ClassB();
  12:          
  13:          classA.a = 0;
  14:          classA.b = 0;
  15:          classA.c = 0;
  16:          classA.d = 0;
  17:          
  18:          classA.fun1();
  19:          classA.fun2();
  20:          classA.fun3();
  21:          classA.fun4();
  22:          
  23:          classB.a = 0;
  24:          classB.b = 0;
  25:          classB.c = 0;
  26:          classB.d = 0;
  27:          
  28:          classB.fun1();
  29:          classB.fun2();
  30:          classB.fun3();
  31:          classB.fun4();
  32:      }
  33:  }

下面是系统提示:

image

只需看关于ClassB的对象的提示。

 

五、image

 

 

理解:

“不再同一包中对非子类可见”------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的非子类的{}作用域内,父类或者子类的对象,访问父类的成员的情况”;

 

image

 

ClassA.java

   1:  package com.test.pkg1;
   2:   
   3:   
   4:   
   5:  public class ClassA {
   6:   
   7:      public int a;
   8:      protected int b;
   9:      int c;
  10:      private int d;
  11:      
  12:      public void fun1(){}
  13:      protected void fun2(){}
  14:      void fun3(){}
  15:      private void fun4(){}
  16:      
  17:      
  18:      public static void main(String[] args) {
  19:          
  20:          ClassA classA = new ClassA();
  21:          
  22:          classA.a = 0;
  23:          classA.b = 0;
  24:          classA.c = 0;
  25:          classA.d = 0;
  26:          
  27:          classA.fun1();
  28:          classA.fun2();
  29:          classA.fun3();
  30:          classA.fun4();
  31:          
  32:      }
  33:      
  34:      
  35:  }
  36:   

ClassB.java

   1:  package com.test.pkg2;
   2:   
   3:  import com.test.pkg1.ClassA;
   4:   
   5:   
   6:  class ClassB extends ClassA{
   7:      
   8:      
   9:  }
  10:   
  11:   
  12:  class ClassC{
  13:   
  14:      public void fun5()
  15:      {
  16:          ClassA classA = new ClassA();
  17:          ClassB classB = new ClassB();
  18:          
  19:          classA.a = 0;
  20:          classA.b = 0;
  21:          classA.c = 0;
  22:          classA.d = 0;
  23:          
  24:          classA.fun1();
  25:          classA.fun2();
  26:          classA.fun3();
  27:          classA.fun4();
  28:          
  29:          classB.a = 0;
  30:          classB.b = 0;
  31:          classB.c = 0;
  32:          classB.d = 0;
  33:          
  34:          classB.fun1();
  35:          classB.fun2();
  36:          classB.fun3();
  37:          classB.fun4();
  38:      }
  39:  }

系统提示:

image

转载于:https://www.cnblogs.com/pengdonglin137/archive/2013/03/22/2976257.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值