您如何决定定义变量“私有”?

2022-09-03 16:22:35

我参加了一次面试。面试官问我为什么需要私有变量。如果你通过定义一个变量私有来实现一些东西,你不能通过定义在java中定义的任何其他访问修饰符来实现同样的目标吗?

According to Java Specification Languages,

A private class member or constructor is accessible only within the body of the
top level class (7.6) that encloses the declaration of the member or constructor.
It is not inherited by subclasses.

但是,如果我正在设计一个类,我该如何决定定义一个变量“private”?


答案 1

通过限制“其他代码”(可能由其他人编写/维护)的访问,您可以更自由地在将来更改它,而不必担心破坏依赖于它的其他代码。

问题不在于“我应该把它设为私有吗?”,而是“这需要非私有吗?是否有其他一些代码可能需要访问该变量?

如果事实证明是这种情况,您可以分配适当的访问权限(可能通过getters/setters),并接受对它的更改将是困难的。否则,您将它保密。


答案 2

我认为你应该从另一个角度来看待它:为什么你会把一个变量变成私有的呢?正确的封装意味着隐藏实现的详细信息,因此默认设置应该是将字段设为私有。