Implement the CombinationLock class. A skeleton can be found here. The API can be found here. A jar with the Lock class can be found here.
package test4;
import java.util.ArrayList;
import java.util.List;
/**
 * A combination lock is a special kind of lock.  Each combination lock
 * has a combination.  The combination lock and its combination
 * form a composition.
 *
 */
public class CombinationLock extends Lock 
{
    private List<Integer> combination;
    /**
     * Initializes this combination lock to be open and have the given combination.
     * 
     * @param combination the combination of this combination lock.
     * @pre. combination != null
     */
    public CombinationLock(List<Integer> combination) 
    {
	super();
	this.setCombination(combination);
    }
    /**
     * Returns the combination of this combination lock.
     * 
     * @return the combination  of this combination lock.
     */
    public List<Integer> getCombination() 
    {
	return new ArrayList<Integer>(combination);
    }
    /**
     * Sets the combination of this combination lock to the 
     * given combination.
     * 
     * @param combination the new combination of this
     * combination lock.
     * @pre. combination != null
     */
    public void setCombination(List<Integer> combination) 
    {
	this.combination = new ArrayList<Integer>(combination);
    }
    /**
     * Tests whether this combination lock is the same as the given object.
     * Two combination locks are the same if they are either both open or
     * both closed and have the same combination.
     * 
     * @param object an object.
     * @return true if this lock is the same as the given object,
     * false otherwise.
     */
    public boolean equals(Object object) 
    {
	boolean equal;
	if (object != null && this.getClass() == object.getClass())
	{
	    CombinationLock other = (CombinationLock) object;
	    equal = super.equals(object) && 
		this.getCombination().equals(other.getCombination());
	}
	else
	{
	    equal = false;
	}
	return equal;
    }
    /**
     * Returns the hash code of this lock.
     * 
     * @return the sum of the digits of the combination of this combination lock
     * if this combination lock is open, the sum of the digits of the combination 
     * of this combination lock plus 1 if this lock is closed.
     */
    public int hashCode()
    {
	int sum = super.hashCode();
	for (Integer number : this.getCombination())
	{
	    sum += number;
	}
	return sum;
    }
}