Source: http://www.cs.toronto.edu/~hojjat/148s07/lectures/week6/08interfaces.pdf