Java Object Oriented Programming Principles