Java:我打算只覆盖的库方法的受保护或公共访问?

Posted

技术标签:

【中文标题】Java:我打算只覆盖的库方法的受保护或公共访问?【英文标题】:Java: protected or public access for library methods that I intend to override only? 【发布时间】:2015-03-06 23:50:11 【问题描述】:

我正在编写一个框架库,其中有一些方法我只打算被覆盖,永远不会在库外调用。但是,将它们设为public 也没有安全风险。 我的印象是,在库中声明了要被覆盖的方法public,而protected 仅在存在一些安全风险时使用? 如果通过公开它们没有可行的安全风险,是否有任何理由选择其中一个?

【问题讨论】:

我认为一般建议是使用protected。如果有人希望它公开,他也可以将其公开,或者只是从同一个包中使用它。 【参考方案1】:

安全永远不是手头的问题,因为反射可以绕过包访问。 'protected' 是一种与人类交流的方式,即如果有人从类或其子类外部调用该方法,则该类并非旨在以合理的方式运行。

【讨论】:

【参考方案2】:

这基本上是一个风格问题。我的经验法则是尽可能制定最严格的政策 - 即,更喜欢 protected 而不是 public。如果将来您决定要公开这些方法,您可以随时将它们设为public。但是,如果您以 public 开头,然后必须更改他们的签名,那么您就有可能破坏可能错误使用它们的其他人的代码。

【讨论】:

“如果您以 pubic 和 […] 开头”请使用 public,而不是 pubic。 ;) @MartinThorsenRanang 就拼写错误而言,这绝对是最令人尴尬的问题之一。感谢您指出了这一点。已编辑和修复。

以上是关于Java:我打算只覆盖的库方法的受保护或公共访问?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 访问类的受保护成员_

覆盖 Java 中的受保护方法

为啥继承的受保护运算符=()具有公共访问权限

使用 Java 反射访问测试用例中的受保护方法

为啥我不能在同一类的受保护方法中调用方法[重复]

Java - 为啥另一个包中的子级无法通过父级引用访问父级的受保护方法?