在一个包中定义一个默认访问权限控制的类FriendlyClass,然后在该包以及另一个包中分别定义类来测试FriendlyClass类中的protected、public和友好数据成员的访问控制能力。
时间: 2024-10-14 13:08:55 浏览: 20
在一个Java程序中,你可以创建一个名为`FriendlyClass`的默认访问权限(package-private)类,这意味着它只在其所在的包(即当前包)内可见。例如:
```java
// FriendlyClass.java (在com.example.mypackage包下)
package com.example.mypackage;
class FriendlyClass {
// 默认访问权限(package-private)的数据成员
protected String protectedMember = "I am accessible within the same package";
// 公共方法(public)
public void displayPublicMethod() {
System.out.println("This is a public method");
}
// 友好数据成员(通常用于内部类或枚举,可以直接访问)
private int friendlyPrivateMember = 0;
}
```
为了测试这个类的访问控制,你可以创建两个包下的类,一个在同包`com.example.mypackage`,另一个在其他包`com.example.anotherpackage`:
```java
// TestInSamePackage.java (在同一包下)
package com.example.mypackage;
import com.example.mypackage.FriendlyClass; // 引入友好的类
public class TestInSamePackage {
public static void main(String[] args) {
FriendlyClass obj = new FriendlyClass();
obj.displayPublicMethod(); // 正常访问公共方法
obj.protectedMember = "Modified in test"; // 访问保护成员
System.out.println(obj.protectedMember);
}
}
// TestInAnotherPackage.java (在另一包下)
package com.example.anotherpackage;
import com.example.mypackage.FriendlyClass; // 引入友好的类
public class TestInAnotherPackage {
public static void main(String[] args) {
FriendlyClass obj = new FriendlyClass(); // 在这里会抛出异常,因为不能跨包访问默认访问的类
try {
System.out.println(obj.protectedMember); // 这里会报错
} catch (NoClassDefFoundError e) {
System.out.println("Cannot access protected member from another package.");
}
}
}
```
在这个例子中,`TestInSamePackage`可以访问`FriendlyClass`的所有成员,包括保护成员,而`TestInAnotherPackage`由于不在同一包内,只能看到默认访问的`FriendlyClass`实例,无法直接访问其保护成员。
阅读全文