使用java写出程序完成对java访问权限的验证
时间: 2024-10-15 20:12:43 浏览: 8
在Java中,访问权限控制是非常重要的,它通过关键字`public`、`private`、`protected`和默认访问级别(`package-private`)来实现。下面是一个简单的例子,展示如何编写一个类来验证不同权限级别的成员:
```java
public class AccessControlExample {
// public 可以被所有包下的类访问
public String publicVariable = "Public variable";
// private 只能在这个类内部访问
private String privateVariable;
// protected 可以被同包下的类以及其子类访问
protected String protectedVariable;
// package-private 对于同一个包内的类可见
String packagePrivateVariable;
// 定义一个公共方法来设置私有变量,体现封装原则
public void setPrivateValue(String value) {
if (this instanceof AccessControlExample) { // 验证是否在同一类内
privateVariable = value;
} else {
throw new IllegalAccessException("Only accessible within the same class.");
}
}
// 定义方法来演示如何检查权限
public boolean checkAccess(String memberName, Class<?> clazz) {
switch (memberName) {
case "publicVariable":
return true; // 公共成员总是可以访问
case "privateVariable":
return clazz == getClass(); // 只有当前类实例才能访问私有属性
case "protectedVariable":
return clazz.isAssignableFrom(AccessControlExample.class); // 子类可以访问保护属性
case "packagePrivateVariable":
return clazz.getPackage().equals(this.getClass().getPackage()); // 同一包内
default:
throw new IllegalArgumentException("Invalid member name");
}
}
// 示例:从外部类尝试访问
public static void main(String[] args) {
AccessControlExample obj = new AccessControlExample();
obj.setPrivateValue("Setting private from outside"); // 成功
System.out.println(obj.checkAccess("publicVariable", obj.getClass())); // 输出:true
System.out.println(obj.checkAccess("privateVariable", obj.getClass())); // 输出:true
System.out.println(obj.checkAccess("protectedVariable", AccessControlExampleSubclass.class)); // 输出:true
System.out.println(obj.checkAccess("packagePrivateVariable", AccessControlExample.class)); // 输出:true
}
}
// 创建一个子类演示继承访问
class AccessControlExampleSubclass extends AccessControlExample {
// 子类可以访问父类的所有保护成员
}
```
阅读全文