Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java访问包_Java_Oop_Class_Packages - Fatal编程技术网

用java访问包

用java访问包,java,oop,class,packages,Java,Oop,Class,Packages,我有一个Java包结构,它应该可以访问,如下所示 如何使底层包类只对中间包访问?TestApp应仅与接口包直接通信。TestApp不应获取有关底层和中间包类的任何信息。怎么做?请帮助您可以将TestApp和Interface放在同一个包中。然后接口必须继承使用受保护方法的中间层。然后中间是使用包保护方法的底层的同一个包 这是你想要的,但老实说,我看不出这样做有什么意义。它假设接口包不是Java接口 可能对代码和模块的单位有更好的概念,但Java 6、7和8语言还没有准备好向其他程序员真正隐藏东西

我有一个Java包结构,它应该可以访问,如下所示


如何使底层包类只对中间包访问?TestApp应仅与接口包直接通信。TestApp不应获取有关底层和中间包类的任何信息。怎么做?请帮助

您可以将TestApp和Interface放在同一个包中。然后接口必须继承使用受保护方法的中间层。然后中间是使用包保护方法的底层的同一个包

这是你想要的,但老实说,我看不出这样做有什么意义。它假设接口包不是Java接口

可能对代码和模块的单位有更好的概念,但Java 6、7和8语言还没有准备好向其他程序员真正隐藏东西。

这是不可能的。 您可以设置类的包访问权限,但是从其他包调用它们会遇到困难。这意味着从中间包到底层包的访问本质上与从TestApp到底层包的访问相同。 UPD:我看到了关于继承的答案,但它并不能完全解决问题——您可以从TestApp中的底层包继承,没有什么可以阻止您这样做。
UPD2:顺便说一下,你的要求让我想起C++中的朋友关键词。它在Java中不存在。

不可能使用Java中的friend系统来指定对包成员更细粒度的访问。如果您使某个文件包外部可见,则该文件包外部的任何内容都可以访问该文件包

您可以为TestApp和Interface软件包使用一个通用软件包,但这在语义上并不正确—您可能将客户端与接口混合在一起


如果您想要强制模块化,允许您将单元中的某些包标记为内部包-这些包根本不会通过有线连接到客户端公开。

为什么要这样做?是因为您不信任TestApp的开发人员吗?如果您只能使用接口,您如何使用中间包?这会有帮助吗?中间包方法应该从接口包中调用,所以我假设接口代码不仅仅有接口;虽然能够做到这一点可能很好,但您还没有说明为什么需要它,可能还有另一种方法可以解决您的问题。底层、中间层和接口层构成了一个jar。所以不要把TestApp和Interface放在一个包中是的,你可以。当jar在JVM中解包时,它和其他目录一样是一个目录。您将新约应用程序与包的名称相同,仅此而已。老实说,如果这是客户的需要,就告诉他们不是这样的。您可以使用代码隐藏Http请求,但不能使用JVM隐藏其他人的代码。