# OOP Principles

## About

Object-Oriented Programming (OOP) is a programming paradigm that organizes code into objects, which are instances of classes.&#x20;

## Java follows four key OOP principles

### **1. Encapsulation** 🔒

* Encapsulation is the practice of **hiding internal details** of a class and exposing only necessary functionality.
* Achieved using **private fields** and **public methods (getters/setters)**.
* Ensures **data integrity** and prevents **direct modification** of variables.

### **2. Inheritance** 🔄

* Inheritance allows a class (**child/subclass**) to acquire properties and behaviors from another class (**parent/superclass**).
* Promotes **code reusability** and **hierarchical relationships**.
* Java uses the `extends` keyword to implement inheritance.

### **3. Polymorphism** 🎭

* Polymorphism allows objects to take **multiple forms**, enabling flexibility and dynamic behavior.
* Two types:
  * **Method Overloading** (Compile-time polymorphism) – Same method name, different parameters.
  * **Method Overriding** (Runtime polymorphism) – Child class provides a specific implementation of a parent class method.

### **4. Abstraction** 🎨

* Abstraction simplifies complex systems by showing only **essential features** and hiding unnecessary details.
* Achieved using **abstract classes** (`abstract` keyword) and **interfaces**.
* Improves **modularity** and reduces **code complexity**.

## **Importance of OOP Concepts**

OOP is crucial in software development because it:

* **Enhances Code Reusability** – Inheritance enables sharing of code, reducing duplication.
* **Improves Maintainability** – Encapsulation helps in keeping code modular and well-organized.
* **Supports Scalability** – OOP makes it easier to expand applications without breaking existing code.
* **Encourages Code Reusability** – Objects and classes allow efficient code sharing across projects.
* **Enhances Security** – Data hiding through encapsulation prevents unauthorized modifications.

{% hint style="danger" %}

#### **Common misconception about OOP is that it is only for large projects**&#x20;

Even small projects benefit from code organization and reusability.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.pranaypourkar.co.in/the-programmers-guide/java/java-basics/basics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
