【问题标题】:Java- Risk between Protected and Public [duplicate]Java-受保护和公共之间的风险[重复]
【发布时间】:2018-07-01 08:07:27
【问题描述】:

当我尝试从具有受保护访问级别的抽象类访问和覆盖继承的抽象函数时,

protected <ReturnDataType> <FunctionName>() {

删除受保护的访问类型后,Eclipse 会抛出此错误

不能从

降低继承方法的可见性

通过为其提供受保护的访问类型的快速修复来解决。

我知道,对于这个被覆盖的函数,我也可以将访问类型设置为 Public。

现在,我的问题是:我将这个功能设为 Public 有什么风险/问题?

【问题讨论】:

  • 我不确定其中的“风险”数字。我认为这只是您是否希望系统中的任何其他方法能够访问您的方法,或者您是否只想允许从您的类继承的类进行访问。这完全取决于您。
  • 很难对风险进行一般性评估。这取决于您的应用程序的架构以及您需要/想要公开的内容。一般来说,您希望将公共成员保持在最低限度。任何公共方法都可以很容易地以您从未想过的方式使用,可能会暴露不应该暴露的数据,并增加系统上可能的攻击向量。除此之外,我不确定如何评估您的特定应用的风险。
  • 您可以在著名的 Effective Java 书籍第 15 条:最小化类和成员的可访问性中找到对该问题的最佳解释。

标签: java inheritance public protected


【解决方案1】:

这是一种帮助保护您的代码免受错误影响的方法。存在没有封装的编码语言。在最极端的情况下,任何代码都可以更改任何数据的任何部分,我们可能根本不希望这成为可能。训练有素的编码人员将减少对给定类型数据进行操作的位置数量,但可能仍然不明显所有可能使对象*处于不同状态的操作组合。当他们的代码被用作其他人代码的一部分时,情况会变得更糟。因此,更改这些 accessType 的风险在于,如果使用不当,可能会导致错误。

【讨论】:

  • 我认为您会更好地了解为什么在重复问题中不允许这样做。你的答案很接近,但不完全在那里。
【解决方案2】:

所有 public 都允许通过另一个包访问该变量,因此如果有人将您的项目作为外部库导入到他们的项目中,他们将能够访问全局变量。这个页面可能对你有用:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2011-05-20
    • 2015-05-16
    • 2012-02-13
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多