Source: http://people.scs.carleton.ca/~lanthier/teaching/JavaNotes/COMP1405_Ch07_OrganizingClasses.pdf