Source: https://www.tutorialspoint.com/java/pdf/java_abstraction.pdf