This question already has an answer here:
I saw a code where getters and setters methods are declared private. I am trying to figure out the logic behind it, and I am really having hard time to understand why would you declare them as private? That's exactly opposite of what we are trying to achieve through getters and setters.
I can think of several reasons:
- you want to prevent future public access.
If a different programmer sees your code and wants access to a variable, but there are no setters and getters, he might think you just forgot about them, and add them themselves. However, if you declare them as private
, it's a statement of intent, saying I don't want these variables to be changed or accessed from the outside.
- you want to associate setting and getting with other actions
Say you don't want public
accessors. But maybe you want a count of how many times a private variable is changed. It's easier to use a setter rather than incrementing the count every time you access that variable.
- you want a central access point
Again, you don't want public
access, but during debugging, you might want to put a breakpoint in every place a private
member is changed. So instead of setting breakpoints everywhere in the class, you just set one in the accessor.
That's exactly opposite of what we are trying to achieve through getters and setters.
Actually, it is not. The reason for declaring getters and setters is to hide the fields. This is done to avoid unwanted coupling; i.e. clients of an API depending on the implementation details of the API. (That coupling can be problematic for a number of reasons.)
The reason for making the getters and setters private is to make the corresponding part of the object's abstract state private. That's largely independent of the decision to use getters and setters or not.
While the case for using getters and setters is not as strong for private state, there are still tangible benefits. For instance:
The getter/setter methods provide a place for adding extra behavior or error checking code.
They also provide a place for adding debug code or injecting test code (for unit testing).
Getters and setters can be overridden. You can't do that with fields (private or not).
来源:https://stackoverflow.com/questions/8983709/why-would-you-declare-getters-and-setters-method-private