Java—受保护和公共之间的风险

Java—受保护和公共之间的风险,java,inheritance,public,protected,Java,Inheritance,Public,Protected,当我试图从一个具有受保护访问级别的抽象类访问和重写继承的抽象函数时 protected <ReturnDataType> <FunctionName>() { protected(){ 在删除受保护的访问类型时,Eclipse会抛出此错误 无法降低继承类中继承方法的可见性 这一问题通过快速修复得到解决,即为其提供accesstype Protected 我知道,我还可以将此重写函数的访问类型设置为Public 现在,我的问题是::将此函数作为公共函数有什么风险/问题?

当我试图从一个具有受保护访问级别的抽象类访问和重写继承的抽象函数时

protected <ReturnDataType> <FunctionName>() {
protected(){
在删除受保护的访问类型时,Eclipse会抛出此错误

无法降低继承类中继承方法的可见性

这一问题通过快速修复得到解决,即为其提供accesstype Protected

我知道,我还可以将此重写函数的访问类型设置为Public


现在,我的问题是::将此函数作为公共函数有什么风险/问题?

所有公共函数都允许通过另一个包访问变量,因此,如果有人将您的项目作为外部库导入到他们的项目中,他们将能够访问全局变量。此页面可能对您有所帮助:

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

我不确定“风险”我认为这只是你是否希望系统中的任何其他方法能够访问你的方法,或者你是否只允许继承自你的类的类进行访问。这完全取决于你。很难对风险进行一般性评估。这取决于你的应用程序的体系结构以及你需要/想要公开的内容。在一般来说,你希望将公共成员保持在最小。任何公共方法都可以以你从未打算的方式被消耗,可能暴露出不应该被暴露的数据,并增加系统上可能的攻击向量。除此之外,我不确定如何评估你的特定应用程序的风险。著名的有效Java书籍第15条:最小化类和成员的可访问性。我想你会更好地理解为什么在重复的问题中不允许这样做。你的答案很接近,但不是很接近。