Mec*_*cki 4 oop protected access-modifiers
我可以理解为什么有公共和私人访问修饰符,这两个也几乎可以在任何语言中找到.我甚至可以理解为什么可能有一个包修饰符,因为你可能希望你的类(那些紧密相关的类)以某种方式相互交互,这不适合公共交互(例如,因为它取决于知识的class internals,也许是因为它会泄露一个秘密,或者因为它可能随时改变并依赖它会破坏所有现有代码,等等).但是,为什么我想要一个受保护的标识符?别误会我的意思,我知道什么是受保护的意思是,但为什么我希望我的类的子类访问某些实例变量或使用某些方法,只是因为它们是子类,即使它们是不同包的一部分?什么是受保护的真实世界用例?
(并且作为实例变量的参数的性能不计,因为JIT编译器总是可以内联访问器方法,将其调用开销减少到零)
Boz*_*zho 15
公共方法是公共接口的一部分.私有方法是内部的.受保护的方法是扩展点.
有了protected你可以通过重写它没有使公共接口的这个方法重新定义部分一类的功能.
另一件事 - 受保护的方法是可以由子类重用的常用方法,但同样不需要成为公共接口的一部分.
例如,在java集合框架中,有一个AbstractList类.它有受保护的modCount字段和受保护的removeRange方法:
modCount所有子类使用(递增)该字段来计算修改的数量.在Iterator通过返回AbstractList利用的那场
该removeRange方法可以由子类重用,而不是让它们再次定义它.
请参阅 Josh Bloch关于API设计的相关演示.
正如评论中所述,以及布洛赫的演讲 - 很好地记录你的课程.如果它是为了继承 - 做出额外的努力.