Corresponding to each get method, programmers also provide a public set method to change the value of a private instance variable in a class. These are called mutator methods (or settters or set or modifier methods). They are void methods meaning that they do not return a value, but they do take a parameter, the new value for the instance variable. Here are some examples of how to write a set method for an instance variable:
class Student {
//Instance variable name
private String name;
/** setName sets name to newName
* @param newName */
public void setName(String newName)
{
name = newName;
}
public static void main(String[] args)
{
// To call a set method, use objectName.setVar(newValue)
Student s = new Student();
s.setName("Ayanna");
}
}
Notice the difference between set (mutator) and get (accessor) methods in the following figure. Getters return an instance variable’s value and have the same return type as this variable and no parameters. Setters have a void return type and take a new value as a parameter to change the value of the instance variable.
Mutator methods do not have to have a name with “set” in it, although most do. They can be any methods that change the value of an instance variable or a static variable in the class, as can be seen in the AP Practice questions below.
In the Party class below, the addPeople method is intended to increase the value of the instance variable numOfPeople by the value of the parameter additionalPeople. The method does not work as intended.
public class Party
{
private int numOfPeople;
public Party(int n)
{
numOfPeople = n;
}
public int addPeople(int additionalPeople) // Line 10
{
numOfPeople += additionalPeople; // Line 12
}
}
Which of the following changes should be made so that the class definition compiles without error and the method addPeople works as intended?
public class Party
{
//number of people at the party
private int numOfPeople;
/* Missing header of set method */
{
numOfPeople = people;
}
}
Which of the following method signatures could replace the missing header for the set method in the code above so that the method will work as intended?
The set method should not have a return value and is usually named set, not get.
public int setNum()
The set method should not have a return value and needs a parameter.
public int setNum(int people)
The set method should not have a return value.
public void setNum(int people)
Yes, the set method should take a parameter called people and have a void return value. The name of the set method is usually set followed by the full instance variable name, but it does not have to be an exact match.
public int setNumOfPeople(int p)
The parameter of this set method should be called people in order to match the code in the method body.