如何在 Java 中的包私有声明中破坏封装

How can be encapsulation broken in package-private declarations in Java

提问人:Sarthak Mittal 提问时间:7/20/2021 更新时间:7/20/2021 访问量:223

问:

“封装很容易被破坏,因为外部代码可以在代码使用的相同包中定义类,从而可以访问包私有声明。”

我无法理解我们如何才能实现声明中所写的内容。如何打破封装?

Java 访问说明符

评论


答:

3赞 Tim Hunter 7/20/2021 #1

你可以通过一个小例子来了解这意味着什么。

在这里,我们有一个带有一些可见性变量的类,即不使用 visibility 关键字时应用的可见性。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

评论

0赞 Sarthak Mittal 7/20/2021
因此,外部类可以使用 InfiltratorClass 渗透器方法来获取包专用可见性变量的访问权限。我做对了吗?在这里,我们可以创建一个 InfiltratorClass,但当我们使用外部库时。那么我们无法创建 InfiltratorClass,因此在这种情况下无法破坏封装?
1赞 Tim Hunter 7/20/2021
@SarthakMittal 是的,例如,您可以使用方法直接编辑值。使用外部库并非不会被篡改,但正确使用关键字可以防止在一般用例中访问变量。InfiltratorClasssetVar1()privateInfiltratorClass