What are the practical (real life) examples of polymorphism, inheritance, composition, overriding, encapsulation, abstraction and other important concepts of OOPS? What are the real life/practical examples of a Java overloading and overriding?