在一个包中定义一个默认访问权限控制的类DefaultClass,然后在该包以及另一个包中分别定义类来测试DefaultClass类中的private, default, protected和public数据成员的访问控制能力。
时间: 2024-10-09 17:05:20 浏览: 49
在Java中,我们可以创建一个名为`DefaultClass`的包内类,它有一个默认(package-private)的成员变量和一些其他访问修饰符的成员变量,以此演示不同访问控制的能力。首先,在包含`DefaultClass`的包(通常命名为com.example.packageA)里定义`DefaultClass`:
```java
// com/example/packageA/DefaultClass.java
package com.example.packageA;
class DefaultClass {
// 默认访问权限(包可见)
private String packagePrivateVar;
// 可见于同一包内的类
default String defaultVar {}
// 受保护的,只能在当前包及其子包中访问
protected String protectedVar;
// 公开的,可以在任何地方访问
public String publicVar;
// ...其他方法...
}
```
然后,在`com.example.packageA`包下的另一个类`TestDefaultClass`中,我们可以尝试访问这些成员:
```java
// com/example/packageA/TestDefaultClass.java
package com.example.packageA;
public class TestDefaultClass {
public static void main(String[] args) {
DefaultClass defaultObj = new DefaultClass();
// 包可见的变量
System.out.println("Package Private: " + defaultObj.packagePrivateVar); // 这行可能会抛出异常,因为默认类不允许外部直接访问
// 默认访问的变量
System.out.println("Default: " + defaultObj.defaultVar); // 这里也无法直接访问,需要显式地声明为final或静态
// 受保护的变量
try {
System.out.println("Protected: " + defaultObj.protectedVar);
} catch (IllegalAccessException e) {
System.out.println("Cannot access protected variable directly");
}
// 公共的变量
System.out.println("Public: " + defaultObj.publicVar);
}
}
// 在另一个包com.example.packageB中,也可以有测试类
// com/example/packageB/TestDefaultClassInOtherPackage.java
package com.example.packageB;
import com.example.packageA.DefaultClass; // 引入DefaultClass
public class TestDefaultClassInOtherPackage {
public static void main(String[] args) {
DefaultClass defaultObj = new DefaultClass(); // 在这里可以直接访问protected和public成员
// ...
}
}
```
阅读全文