Encapsulation

the bundling of data (variables) and methods (functions) that operate on the data into a single unit. Restricts access to some attributes and exposes only necessary attributes for modification

Inheritance

Allowing a class to inherit properties and behaviors from another class, promoting code reuse and reducing redundancy.

Polymorphism

allows a single function or method to have multiple behaviors depending on the object calling it.

Abstraction

Hiding complex implementation details and showing only the essential features of an object to the user