Source: https://www.eecs.yorku.ca/~jackie/teaching/lectures/2017/F/EECS2030/slides/10-Abstract-Classes-Interfaces-4up.pdf