1,042
社区成员
发帖
与我相关
我的任务
分享public成员变量/方法、private成员变量/方法、protected成员变量/方法和友好成员变量/方法的可见范围
Test
──package1
── AccessModifiers.java
── SubClass.java
── package2
── TestAccess.java
package Package1;
public class AccessModifiers {
public int publicField = 1;
private int privateField = 2;
protected int protectedField = 3;
int defaultField = 4;
public void publicMethod() {
System.out.println("Inside publicMethod");
}
private void privateMethod() {
System.out.println("Inside privateMethod");
System.out.println("Private Field Value: " + privateField);
}
protected void protectedMethod() {
System.out.println("Inside protectedMethod");
}
void defaultMethod() {
System.out.println("Inside defaultMethod");
}
public static void main(String[] args) {
AccessModifiers am = new AccessModifiers();
am.publicMethod();
am.privateMethod();
am.protectedMethod();
am.defaultMethod();
}
}
运行结果:

package Package1;
class SubClass extends AccessModifiers {
void testAccess() {
System.out.println(publicField);
System.out.println(privateField);
System.out.println(protectedField);
System.out.println(defaultField);
publicMethod();
privateMethod();
protectedMethod();
defaultMethod();
}
}
private处编译错误:

package Package2;
import Package1.AccessModifiers;
public class TestAccess {
public static void main(String[] args) {
AccessModifiers obj = new AccessModifiers();
System.out.println(obj.publicField);
System.out.println(obj.privateField);
System.out.println(obj.protectedField);
System.out.println(obj.defaultField);
obj.publicMethod();
obj.privateMethod();
obj.protectedMethod();
obj.defaultMethod();
}
}
除public处,皆编译错误:

结果如表所示:
|
类A的成员变量/成员方法 |
public |
private |
protected |
(package) |
|
类A自己的方法 |
√ |
√ |
√ |
√ |
|
类B(与A同包的方法) |
√ |
× |
√ |
√ |
|
类C(与A不同包的方法) |
√ |
× |
× |
× |
实验结果:
public成员变量/方法、private成员变量/方法、protected成员变量/方法和友好成员变量/方法的可见范围
1.public成员可以在任何地方被访问。
2.private成员只能在定义它们的类内部访问。
3.protected成员可以在同一个包内的类和任何子类中访问。
4.默认访问权限(友好)的成员只能在同一个包内的类之间访问。
5.实验验证了不同访问修饰符对成员变量和方法的可见性影响,以及它们在继承和多包环境下的行为。