2011-12-11 65 views

回答

26

理论上,受保护的属性(变量)是面向对象语言中的反模式。如果只有子类需要访问其超类的成员属性,则将这些属性本身定义为私有,并创建受保护的访问方法(getter和setter)。这种方法应用了“信息隐藏”的概念。还有一种替代解决方案:定义受保护的不可变(最终)成员属性。

进一步阅读:

+2

“正式”?? –

+2

@Oli Charlesworth:好吧,'正式'可能不是正确的名词,如果我说'理论上',你会同意吗? – home

17

我想,让一切私人是一个反模式。通常类被用在一堆中,并且作为一个整体代表被封装的实体放置在单独的包中。他们不需要隐藏彼此的某些东西,但是这个规则强制隐藏没有很好的理由,越来越混乱,并有效地使风格变得更糟(据我所知)。同时,我们经常看到每隔包的类是公开的。我想这更糟糕,但checkstyle不检查。

封装不仅存在于课堂上,还有封装,系统等。我认为这些水平更重要。

4

允许访问包简化了包内的编程,并减少了样板代码。通常情况下,访问只需要在包内。私有访问迫使您创建大量几乎无用的访问方法。这实际上具有减少封装和信息隐藏的作用,因为类必须通过公共访问器方法暴露内部数据/结构应用程序范围,而不是仅仅打包范围。默认的软件包可见性也使得测试更容易,因为测试类也位于相同的软件包中(在测试目录/树中)。

相关问题