Oop 有没有一个概念像“什么;“受控能见度”;在任何OO语言/模型中?

Oop 有没有一个概念像“什么;“受控能见度”;在任何OO语言/模型中?,oop,inheritance,Oop,Inheritance,我在一个面向对象的环境中工作,只是和同事们进行概念性的讨论。假设您有两个类(“A”和“B”),没有共同的祖先,而B需要从A访问信息。它可以通过字段或getter实现。进退两难的是,这些必须被宣布为“公开”的,因此全世界都可以看到。因为“私有”可见性是不可能的(由于不同的目的,类树中的位置完全不同),所以它们被实现为公共的 但是我想知道是否有一个概念(在任何OO语言中)允许控制这些字段只对B可见,而对其他任何人都不可见?在java中,您可以声明受保护的并打包私有字段/方法。其中受保护的字段/方法可

我在一个面向对象的环境中工作,只是和同事们进行概念性的讨论。假设您有两个类(“
A
”和“
B
”),没有共同的祖先,而B需要从
A
访问信息。它可以通过字段或getter实现。进退两难的是,这些必须被宣布为“公开”的,因此全世界都可以看到。因为“私有”可见性是不可能的(由于不同的目的,类树中的位置完全不同),所以它们被实现为公共的


但是我想知道是否有一个概念(在任何OO语言中)允许控制这些字段只对
B
可见,而对其他任何人都不可见?

在java中,您可以声明受保护的并打包私有字段/方法。其中受保护的字段/方法可访问同一包中的类以及扩展类。包专用字段/方法仅可用于同一包中的类

因此,通过这种方式,您不能指定一个只应具有访问权限的类,但您可以充分限制访问权限,以便在应用程序/库中实现相同的效果


请注意,java还通过设置acces和securityRules提供了更强大的禁止acces的机制。它甚至可以防止反射(一种访问java中通常不可接受的字段/方法的常见方法)。但它可能不是您要寻找的机制,因为它不是一个真正的基本概念。

在java中,您可以声明受保护的字段/方法并对其进行打包。其中受保护的字段/方法可访问同一包中的类以及扩展类。包专用字段/方法仅可用于同一包中的类

因此,通过这种方式,您不能指定一个只应具有访问权限的类,但您可以充分限制访问权限,以便在应用程序/库中实现相同的效果

请注意,java还通过设置acces和securityRules提供了更强大的禁止acces的机制。它甚至可以防止反射(一种访问java中通常不可接受的字段/方法的常见方法)。但它可能不是您正在寻找的机制,因为它并不是一个真正的基本概念。

C++已经和

Java或类似程序中,如果可以修改这两个类,请使用


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

谢谢-友谊看起来和我想要的概念一模一样:)这个答案谈到了在Java中以“朋友”类型的方式共享私有数据。.使用类
a
B
:):@jrahhali:是的,事实上,它使用了访问者模式,或者是它的一个变体。谢谢-友谊看起来和我想要的概念一模一样:)这个答案讲的是在Java中以“朋友”类型的方式共享私有数据。.使用类
a
B
:):@jrahhali:是的,事实上,它使用了访问者模式,或者它的一个变体。