【问题标题】:Is there a concept like "controlled visibility" in any OO-Language/Model?在任何 OO 语言/模型中是否有“受控可见性”之类的概念?
【发布时间】:2016-08-18 08:10:18
【问题描述】:

我在 OO 环境中工作,并且正在与同事进行概念性讨论。假设您有两个没有共同祖先的类(“A”和“B”),B 需要访问来自A 的信息。它可以通过字段或吸气剂来做到这一点。困境是这些必须被宣布为“公共”,因此对全世界都是可见的。由于“私有”可见性是不可能的(由于不同的目的,在类树中的位置完全不同),它们已被实现为公共的。

但我想知道是否有一个概念(在any OO-Language 中)可以控制这些字段只对B 和其他人可见?

【问题讨论】:

    标签: oop inheritance


    【解决方案1】:

    C++Friend classFriend function

    Java 或类似版本中,如果您可以修改这两个类,请使用 Visitor pattern

    【讨论】:

    • 谢谢 - 友谊看起来和我一直在寻找的概念一模一样 :)
    • 这个答案谈到在 Java 中以“朋友”类型的方式共享私有数据..使用类 AB :): stackoverflow.com/questions/14226228/…
    • @jrahhali:是的,事实上,它使用了访问者模式,或者它的一种变体。
    【解决方案2】:

    在 java 中,您可以声明受保护和封装私有字段/方法。受保护的字段/方法可以访问同一包中的类以及扩展类。包私有字段/方法只能用于同一包中的类。

    因此,这样您就不能指定一个只应具有访问权限的类,但您可以很好地限制访问权限以在应用程序/库中实现相同的效果。

    请注意,java 还提供了通过设置访问权限和安全规则来更健壮地禁止访问的机制。它甚至可以防止反射(在 java 中访问通常无法访问的字段/方法的常用方法)。但它可能不是您正在寻找的机制,因为它并不是一个真正的基本概念。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2012-09-10
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多