There should be an abstraction barrier between the client and the implementation.
Data hiding
Using modifiers such as private and public explicitly specify if a field or method can be accessed from outside the abstraction barrier. In general, class fields should be private.
To initialise these fields, a constructor should be used instead.
Accessor and mutators
An accessor getX() or mutator setX(...) is still better than setting the field public. This is as it still adds a layer of abstraction, such as the ability to rename the field internally without affecting the clients.
These methods can also implement validation checks, which could be bypassed with public instance/class variables.
The use of accessor and mutators are not recommended in general.