Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 - Fatal编程技术网

Java 如何使某些方法仅对两个不同的类可见?

Java 如何使某些方法仅对两个不同的类可见?,java,Java,我有一些加密和解密方法,我希望能够在两个不同的类中使用它们 但当然,我不想把它们公开,因为那样任何人都可以叫它们?如何使这些方法只对两个特定类可见,而不对其他类可见 编辑:如果我无法扩展该类,因为这些其他类已经在扩展一些其他类,该怎么办?您需要创建受保护的方法,并在同一个包中创建这两个类。并在不同的包中创建其他类。As保护方法适用于同一包中的子类。还可以在创建的2个类中扩展方法类。如果这些类是同一个包的一部分,则可以将它们设为包私有(即,无修改器)。“包私有”或“默认访问”方法只能在声明它们的包

我有一些加密和解密方法,我希望能够在两个不同的类中使用它们

但当然,我不想把它们公开,因为那样任何人都可以叫它们?如何使这些方法只对两个特定类可见,而不对其他类可见


编辑:如果我无法扩展该类,因为这些其他类已经在扩展一些其他类,该怎么办?

您需要创建受保护的方法,并在同一个包中创建这两个类。并在不同的包中创建其他类。As保护方法适用于同一包中的子类。还可以在创建的2个类中扩展方法类。

如果这些类是同一个包的一部分,则可以将它们设为包私有(即,无修改器)。“包私有”或“默认访问”方法只能在声明它们的包中使用,并且不能成为类API的一部分。通过在方法包的声明上不添加任何修饰符,可以将其声明为私有

Modifier    | Class | Package | Subclass | World

public      |  Y    |    Y    |    Y     |   Y

protected   |  Y    |    Y    |    Y     |   N

no modifier |  Y    |    Y    |    N     |   N

private     |  Y    |    N    |    N     |   N

我不确定你是在暗示公开还是保密会降低安全性?从任何真正意义上讲,这绝对不是。Java类可见性选项不是一个“基于语言的安全性”解决方案,但我正在做的是加密用户密码以存储在数据库中。这是通过一个函数实现的。如果这个函数是可见的,那么使用这个库的人可以只查看数据库表,然后自己调用decrypt函数。但如果此方法是私有的,则只能在代码内调用,因此不允许外部人员使用。这是我的想法。。。在这方面,什么是正确的解决方案?不,这绝对不是正确的解决方案。方法可见性是名称空间的便利。代码仍然在运行的虚拟机中—在真实机器的内存中。数据库仍然可以直接访问。您应该假设任何人都可以读取数据库表中的内容,并相应地进行操作。这主要涉及到只存储加密密码,甚至更好的是——单向密码散列。如果“decrypt”函数存在于任何地方(例如,在Java字节码中),则假设有适当动机的攻击者可以运行该函数。AspectJ可以实现此受用例保护的方法,其他包中的子类也可以访问该方法,不需要相同的包。没有修饰符只能访问该包,因此将方法创建为没有修饰符是很好的实践。谢谢,但是如果我无法扩展该类,会发生什么?因为我已经在扩展另一个类了?您无法访问超类成员和方法。