Source: https://cs.uwlax.edu/~dmathias/cs220/slides/02-abstractClassesAndInterfaces.pdf