是否有充分的理由从非子类访问受Java保护的方法?

是否有充分的理由从非子类访问受Java保护的方法?,java,inheritance,protected,Java,Inheritance,Protected,不从定义类继承的类可以访问受保护的方法这一事实一直困扰着我。我经常在抽象类中使用抽象保护的方法,让子类定义一些功能。实际上,这些是私有方法——它们不打算在类层次结构之外调用。然而,Java并没有给我一个这样说的方法,因为包中的任何类都可以调用受保护的方法 我的问题是,允许这样做的设计原理是什么?对于需要一个只能在包中调用或由包外的随机子类调用的方法,是否有一个有效的用例?我从来没有遇到过这种情况,我想知道其他人是否遇到过。这个问题的解决方案听起来像是重新组织您的项目以包含多个包,这样每个包都有超

不从定义类继承的类可以访问受保护的方法这一事实一直困扰着我。我经常在抽象类中使用抽象保护的方法,让子类定义一些功能。实际上,这些是私有方法——它们不打算在类层次结构之外调用。然而,Java并没有给我一个这样说的方法,因为包中的任何类都可以调用受保护的方法


我的问题是,允许这样做的设计原理是什么?对于需要一个只能在包中调用或由包外的随机子类调用的方法,是否有一个有效的用例?我从来没有遇到过这种情况,我想知道其他人是否遇到过。

这个问题的解决方案听起来像是重新组织您的项目以包含多个包,这样每个包都有超类、子类,而没有其他内容。与其说它是一个硬性的解决方案,不如说它是一种变通方法,但它应该做您希望它做的事情。

这个问题的解决方案听起来像是重新组织您的项目,使其包含多个包,以便每个包都有超类、子类,而没有其他内容。与其说它是一个硬性解决方案,不如说它是一种变通方法,但它应该做您希望它做的事情。

在大型项目中,测试类调用被测试类的内部方法是很常见的,受保护或包级访问允许这样做

在我看来,
protected
修饰符更像是一种文档特性,而不是用于封装代码的强制机制。通过将一个方法或字段标记为受保护,您向其他开发人员表明,所讨论的代码是一个内部实现细节,在将来的版本中可能会发生更改,而不是该类的公共API的一部分


通过强制转换和反射,其他开发人员通常可以获得您不希望他们获得的代码。如果一个方法调用被其他类调用可能有害,那么解决方案不是尝试使用Java的访问规则将其锁定。重构类以支持不可变的数据结构和清晰的关注点分离。

在大型项目中,测试类调用被测试类的内部方法是很常见的,受保护或包级别的访问允许这样做

在我看来,
protected
修饰符更像是一种文档特性,而不是用于封装代码的强制机制。通过将一个方法或字段标记为受保护,您向其他开发人员表明,所讨论的代码是一个内部实现细节,在将来的版本中可能会发生更改,而不是该类的公共API的一部分

通过强制转换和反射,其他开发人员通常可以获得您不希望他们获得的代码。如果一个方法调用被其他类调用可能有害,那么解决方案不是尝试使用Java的访问规则将其锁定。重构类以支持不可变的数据结构和清晰的关注点分离。

可能重复的可能重复的