如何在 Java 中的包私有声明中破坏封装
Posted
技术标签:
【中文标题】如何在 Java 中的包私有声明中破坏封装【英文标题】:How can be encapsulation broken in package-private declarations in Java 【发布时间】:2021-09-28 00:11:52 【问题描述】:“封装很容易被破坏,因为外部代码可以在您的代码使用的相同包中定义类,从而可以访问您的包私有声明。”
我无法理解我们如何才能实现声明中所写的内容。封装怎么破?
【问题讨论】:
【参考方案1】:您可以通过一个小示例了解这意味着什么。
这里我们有一个带有一些 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 渗透方法来访问包私有可见性变量。我做对了吗?在这里,我们可以创建一个 InfiltratorClass,但是当我们使用外部库时。那么我们就不能创建 InfiltratorClass 所以在这种情况下不能破坏封装? @SarthakMittal 是的,您可以让InfiltratorClass
直接使用setVar1()
方法编辑值。使用外部库isn't impervious to tampering,但正确使用private
关键字可以防止InfiltratorClass
在一般使用情况下访问变量。以上是关于如何在 Java 中的包私有声明中破坏封装的主要内容,如果未能解决你的问题,请参考以下文章
java反射机制可以调用到私有方法,是否就破坏了JAVA的卦装性呢。