为什么不应该为继承声明一个受保护的变量?

Oh *_*oon 4 java inheritance

我从文献中读到,变量不应该被声明protected,因此它可以在继承树中保持可见.

为什么会这样?

Jon*_*eet 14

字段是实现细节 - 它们通常不应被视为API的一部分 - 这样您就可以在以后确切地更改事物的存储方式.如果你保护一个字段,它将可用于子类,而不是子类只能看到它们可以依赖的API.

如果您想在以后限制哪个值在该字段上有效,该怎么办?当它受到保护时,您不会得到任何验证或类似的任何内容.子类可以把任何旧垃圾放在那里.如果将其保密并提供受保护的setter方法,则可以应用适当的验证.

简而言之:将您的客户 - 通过子类化视为客户端的方式与您的客户通过调用方式非常相似.为他们提供一个API,并将您的实施细节保密.