There is no doubt that Object-oriented Programming is a pillar of software development and also one of the reasons for a huge success of Java. A good knowledge of Object-oriented programming helps you to create better software. It also helps you to communicate your ideas better with your team and fellow programmers. Despite being such an important technology, it's difficult to find good programmers who understand OOP well. Many programmers just think that OOP is nothing more than Abstraction, Inheritance, Encapsulation, and Polymorphism, without truly understanding these concepts and mastering them.