Java 为什么Checkstyle中默认不允许使用受保护的变量?

Java 为什么Checkstyle中默认不允许使用受保护的变量?,java,oop,checkstyle,Java,Oop,Checkstyle,我在eclipse中收到了很多类似这样的警告: 变量“myVariable”必须是私有的,并且具有访问器方法 我想我得到它们是因为我没有在eclipse中手动设置为true。但为什么默认设置为false?我不应该使用受保护的属性吗?理论上,受保护的属性(变量)在面向对象语言中是一种反模式。如果只有子类需要访问其超类的成员属性,则将属性本身定义为私有属性,并创建受保护的访问器方法(getter和setter)。这种方法应用了“信息隐藏”的概念。还有另一种解决方案:定义受保护的不可变(最终)成员属性

我在eclipse中收到了很多类似这样的警告:

变量“myVariable”必须是私有的,并且具有访问器方法


我想我得到它们是因为我没有在eclipse中手动设置为true。但为什么默认设置为false?我不应该使用受保护的属性吗?

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

进一步阅读:


我想,把一切都私有化是一种反模式。通常,类是一堆使用的,作为一个整体,它们表示放置在单独包中的封装实体。他们不需要互相隐藏某些东西,但这条规则会毫无理由地强制隐藏,增加混乱,并有效地使风格(据我所知)变得更糟。同时,我们经常看到包中的每个类都是公共的。我想这更糟,但checkstyle没有检查


封装不仅存在于类级别,还存在于包、系统等。我认为这些级别更为重要。

允许包访问简化了包内的编程,并减少了样板代码。通常,只需要从包内访问。私有访问迫使您创建许多几乎无用的访问器方法。这实际上具有减少封装和信息隐藏的效果,因为类必须在应用程序范围内公开内部数据/结构,而不仅仅是通过公共访问器方法在包范围内公开。默认的包可见性也使测试更容易,因为测试类也位于同一个包中(在test dir/tree中)。

@Oli Charlesworth:好的,“官方”可能不是正确的术语,如果我说“理论上”你会同意吗?