对java中的访问限定符的理解1
可以这样理解:
“同一类中可见”------“相对于父类,在父类的{}作用域内,父类的对象可以访问全部的成员”;
“同一包中对子类可见”------“相对于父类,与父类在同一包A中,在包A里面的子类的{}作用域内,父类或者子类的对象访问父类成员的情况”;
“同一包中对非子类可见”------“相对于父类,与父类在同一包A中,在包A里面的非子类的{}作用域内,父类或者子类的对象访问父类的成员的情况”;
“不同包中对子类可见”-------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的子类的{}作用域内,子类的对象,访问父类的成员的情况”;
“不再同一包中对非子类可见”------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的非子类的{}作用域内,父类或者子类的对象,访问父类的成员的情况”;
下面一行一行的解释:
一、
理解:
“同一类中可见”------“相对于父类,在父类的{}作用域内,父类的对象可以访问全部的成员”;
示例:
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:
编译无误!
理解:
“同一包中对子类可见”------“相对于父类,与父类在同一包A中,在包A里面的子类的{}作用域内,父类或者子类的对象访问父类成员的情况”;
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: }
下面是系统提示:
三、
理解:
“同一包中对非子类可见”------“相对于父类,与父类在同一包A中,在包A里面的非子类的{}作用域内,父类或者子类的对象访问父类的成员的情况”;
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: }
下面是系统提示:
理解:
“不同包中对子类可见”-------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的子类的{}作用域内,子类的对象,访问父类的成员的情况”;
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: }
下面是系统提示:
只需看关于ClassB的对象的提示。
理解:
“不再同一包中对非子类可见”------“相对于父类(在包A中),与父类不在同一包(比如包B)中,在包B里面的非子类的{}作用域内,父类或者子类的对象,访问父类的成员的情况”;
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: }
系统提示:
本文来自博客园,作者:dolinux,未经同意,禁止转载











浙公网安备 33010602011771号