
可以這樣了解:
“同一類中可見”------“相對于父類,在父類的{}作用域内,父類的對象可以通路全部的成員”;
“同一包中對子類可見”------“相對于父類,與父類在同一包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:}
系統提示: