好吧,让我们离开关于友谊是否打破封装的争论,并且实际上尝试优雅地提出一个连贯的设计.这是一个双重功能:
1)关于如何实施的一般问题:
public class A { friend class B; }
2)为什么我需要这个功能?我的一些类实现了Serializable接口.但是,我想在Derived类中使Serializable方法受到保护,这样我就不会将它们暴露给客户端(以及文档中的javadoc).但是,内部类应该能够访问它们.在java中解决这个问题的一般方法是什么?
注意:我正在使用当前C++标准中定义的友谊.
谢谢
一般的解决方案是使方法package-private(这是Java中的默认保护级别).这样,同一个包中的任何代码都可以访问它们,但不能访问外部代码.
Java不允许任意共享具有特定外部类的方法.
编辑:受保护的成员实际上不如包私有.如果您有受保护的成员,则可以从包外的派生类以及包内的任何类访问它们.这可能是您的问题的解决方案 - 在您要导出到的包中的另一个类中派生类.
通常,Java将包视为封装的主要模块.public/protected接口用于包外的类,默认保护级别允许在包内访问.