gpt4 book ai didi

oop - 为什么 OO 语言真的需要 PROTECTED 访问修饰符?

转载 作者:行者123 更新时间:2023-12-03 18:27:35 25 4
gpt4 key购买 nike

我可以理解为什么会有 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所有子类都使用(递增)字段来计算修改次数。 IteratorAbstractList 返回使用该字段
  • removeRange方法可以被子类重用,而不是让它们再次定义它。

  • See this Josh Bloch 关于 API 设计的相关演示。

    如评论中所述,以及 Bloch 的演示文稿中 - 很好地记录您的类(class)。如果它是为了继承 - 请付出额外的努力。

    关于oop - 为什么 OO 语言真的需要 PROTECTED 访问修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279793/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com