This document discusses the basic features of object-oriented programming (OOP) and Java. It defines OOP as a programming paradigm based on modeling real-world entities as objects that have attributes and behaviors. The key features of OOP discussed are: classes, objects, inheritance, polymorphism, abstraction, and encapsulation. Classes are logical entities that define objects of similar types. Inheritance allows classes to acquire properties of other classes. Polymorphism means an operation can exhibit different behaviors depending on the data types used. Abstraction hides complexity and only represents essential features. Encapsulation binds data and methods into a single unit.