Instance variables are always visible in all methods of the class. They always refer to the invocation object.
Example: In the statement return name; the instance variable name is an instance variable of the invocation object for the method.
The public instance variables are visible outside the class, and they can be accessed through a reference to the object to which they belong, by means of the field selection operator ``.''.
Example: If we had defined the class to represent persons as follows:
public class Person2 { //instance variables (data fields) private String name; public String residence; //residence is declared public //methods (operation fields) public String getName() { return name; } public String getResidence() { return residence; } public void setResidence(String newResidence) { residence = newResidence; } }
then we could directly access the instance variable residence, as shown by the following client:
public class ClientClassPerson2 { public static void main(String[] args) { Person2 p1; p1 = new Person2(); p1.setResidence("Roma"); //OK! the field setResidence is public System.out.println(p1.getResidence()); //OK! the field getResidence is public System.out.println(p1.residence); //OK! the field residence is public } }
Note: Typically, the instance variables must be declared private, to hide from the clients the representation of the objects of the class. This leaves the freedom to change such a representation without the need to modify the clients.