我可以理解为什么会有 public 和 private 访问修饰符,这两个几乎在任何语言中都可以找到。我什至可以理解为什么可能有一个包修饰符,因为您可能希望您的类(那些紧密属于一起的)以某种方式相互交互,这不适合公共(public)交互(例如,因为它取决于知识类内部,可能是因为它会泄露一个 secret ,或者可能是因为它可能随时更改并且依赖它会破坏所有现有代码,等等)。但是,为什么我想要一个 protected 标识符?不要误会我的意思,我知道 protected 含义,但是为什么我希望我的类的子类访问某些实例变量或使用某些方法,仅仅因为它们是子类并且即使它们是不同包的一部分? protected 真实世界用例是什么?
(并且作为实例变量的参数的性能不计算在内,因为 JIT 编译器总是可以内联访问器方法,将它们的调用开销降低到零)
最佳答案
公共(public)方法是公共(public)接口(interface)的一部分。私有(private)方法是内部方法。 protected 方法是扩展点。
与 protected
您可以通过重写类来重新定义类的功能,而无需将此方法作为公共(public)接口(interface)的一部分。
另一件事- protected 方法是可以被子类重用的通用方法,但也不需要成为公共(public)接口(interface)的一部分。
例如,在 java 集合框架中,有 AbstractList
类(class)。它保护了modCount
字段和 protected removeRange
方法:
modCount
所有子类都使用(递增)字段来计算修改次数。 Iterator
由 AbstractList
返回使用该字段 removeRange
方法可以被子类重用,而不是让它们再次定义它。 See this Josh Bloch 关于 API 设计的相关演示。
如评论中所述,以及 Bloch 的演示文稿中 - 很好地记录您的类(class)。如果它是为了继承 - 请付出额外的努力。
关于oop - 为什么 OO 语言真的需要 PROTECTED 访问修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279793/