【问题标题】:How can be encapsulation broken in package-private declarations in Java如何在 Java 中的包私有声明中破坏封装
【发布时间】:2021-09-28 00:11:52
【问题描述】:

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

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

【问题讨论】:

    标签: java access-specifier


    【解决方案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 在一般使用情况下访问变量。
    猜你喜欢
    • 2013-04-16
    • 2012-11-28
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2011-05-10
    • 1970-01-01
    相关资源
    最近更新 更多