A deep understanding of OOP and its key principles will help you better understand the structure of the Java language and write good code. This selection of resources includes several articles that will teach you OOP basics as well as some useful nuances.
Principles of object-oriented programming
If you were wondering why Java is designed the way it is and not some other way, then it's time to look at programming theory — the principles of OOP. This detailed lesson will teach you what object-oriented programming is and explain inheritance, abstraction, encapsulation and polymorphism. And then you will see examples of how these principles are implemented in Java.
Principles of OOP
Here's another lesson about OOP. It will use examples to help you understand what classes and objects are, and how to apply basic OOP principles. You will also receive useful tips on what to do to make your programming style align with OOP concepts.
Encapsulation in Java
This short text will tell you more about encapsulation. Why is it needed in Java? How does the concept of encapsulation help us? What would we do without encapsulation, and what would our code look like then?
Polymorphism and friends
And this article is about polymorphism. It will help you develop a deeper understanding of this OOP principle. You will also learn how static polymorphism differs from dynamic polymorphism. Basically, there's a lot of new information in this material, so don't skip it!