当我对一个类进行子类化时,我要做的第一件事就是将一堆私有方法更改为protected
关于private
vs protected
方法的一些理由:
private
方法防止代码重用。子类不能使用私有方法中的代码,而可能不得不再次实现它-或重新实现最初依赖于私有方法&c的方法。
在另一方面,这是任何方法不是 private
可以看作是由类“外部世界”提供的API,在这个意义上的第三方子类被认为是“外面的世界”也一样,别人在他的回答提出已经。
那是一件坏事?-我不这么认为。
当然,(伪)公共API会锁定原始程序员,并阻碍这些接口的重构。但是反过来,为什么程序员不应该像公共API一样干净,稳定地设计自己的“实现细节”呢?他是否应该使用它private
以便草率构造“私有”代码?想也许他以后可以清理,因为没人会注意到吗?-不
程序员也应该在他的“私有”代码中稍加思考,以便以允许甚至促进尽可能多地重用它的方式来构造它。这样,非私有部门在将来可能不会像某些恐惧那样成为沉重的负担。
很多(框架)代码,我看到采用不一致的用途private
:protected
,它几乎做任何事情比委托给私有方法更多的非最终方法是常见的。protected
,其非最终方法的合同也只能通过直接访问私有字段来实现。
尽管从技术上讲,没有任何方法可以使(编译器)显而易见,但是这些方法在逻辑上不能被覆盖/增强。
需要可扩展性和继承性吗?不要做你的方法private
。
不想改变班上的某些行为吗?做你的方法final
。
真的不能在定义明确的特定上下文之外调用您的方法吗?使您的方法private
和/或考虑如何使所需的定义明确的上下文可用于通过另一个protected
包装方法重用。
这就是为什么我主张private
谨慎使用。并且不要private
与之混淆final
。-如果方法的实现对于该类的总协定至关重要,因此不能替换/重写该方法,请使用它final
!
对于领域来说,private
还算不错。只要可以通过适当的方法(不是 getXX()
或setXX()
!)合理地“使用”该字段。