【发布时间】:2021-09-28 00:11:52
【问题描述】:
“封装很容易被破坏,因为外部代码可以在您的代码使用的相同包中定义类,从而可以访问您的包私有声明。”
我无法理解我们如何才能实现声明中所写的内容。封装怎么破?
【问题讨论】:
标签: java access-specifier
“封装很容易被破坏,因为外部代码可以在您的代码使用的相同包中定义类,从而可以访问您的包私有声明。”
我无法理解我们如何才能实现声明中所写的内容。封装怎么破?
【问题讨论】:
标签: java access-specifier
您可以通过一个小示例了解这意味着什么。
这里我们有一个带有一些 package-private 可见性变量的类,当不使用可见性关键字时应用可见性。
package insider;
public class PrivateClass {
static int var1 = 10;
static String var2 = "Secret";
}
这里我在另一个包中有一个类。这不会为变量抛出任何可见性错误。
package outsider;
import insider.PrivateClass;
public class OutsiderClass {
public static void outsider() {
System.out.println(PrivateClass.var2 + " " + PrivateClass.var1);
}
}
这里我有一个与我们的package-private 变量类在同一个包中的类。这个在访问变量时不会抛出错误。
package insider;
public class InfiltratorClass {
public static void infiltrator() {
System.out.println(PrivateClass.var2 + " " + PrivateClass.var1);
}
}
文件结构概述:
insider
PrivateClass
InfiltratorClass
outsider
OutsiderClass
【讨论】:
InfiltratorClass 直接使用setVar1() 方法编辑值。使用外部库isn't impervious to tampering,但正确使用private 关键字可以防止InfiltratorClass 在一般使用情况下访问变量。