public class Money { public static final Money ZERO = new Money(0); private int pence; private Money(int pence) { this.pence = pence; } public static Money fromPence(int pence) { return new Money(pence); } public Money add(Money other) { return new Money(pence + other.pence); } public Money subtract(Money other) { return new Money(pence - other.pence); } @Override public boolean equals(Object other) { Money m = (Money) other; return pence == m.pence; } @Override public int hashCode() { return new Integer(pence).hashCode(); } @Override public String toString() { return "" + pence + "p"; } }