Answer
4 Pillars of OOP in Java
1. Encapsulation — "Data Hiding"
Wrapping data (fields) and methods into a single unit (class), and restricting direct access using access modifiers.
public class BankAccount {
private double balance; // hidden — cannot access directly
public double getBalance() { return balance; } // controlled access
public void deposit(double amount) {
if (amount > 0) balance += amount; // validation before changing
}
}
// Usage
BankAccount acc = new BankAccount();
acc.deposit(1000);
System.out.println(acc.getBalance()); // 1000.0
// acc.balance = -5000; // ❌ compile error — private
Benefits: Data validation, security, flexibility to change implementation.
2. Inheritance — "Code Reuse"
A child class acquires properties and behavior of a parent class using extends.
public class Animal {
public void eat() {
System.out.println("Animal eats");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println("Dog barks");
}
}
Dog dog = new Dog();
dog.eat(); // inherited from Animal
dog.bark(); // own method
Types in Java: Single, Multilevel, Hierarchical (Multiple inheritance via class is NOT supported — use interfaces).
3. Polymorphism — "Many Forms"
Same method name behaves differently based on context.
Compile-time (Method Overloading):
public class Calculator {
public int add(int a, int b) { return a + b; }
public double add(double a, double b) { return a + b; }
public int add(int a, int b, int c) { return a + b + c; }
}
Runtime (Method Overriding):
Animal animal = new Dog();
animal.eat(); // calls Dog's version at runtime
4. Abstraction — "Hide Complexity"
Show only what is necessary; hide implementation details.
// Abstract class
abstract class Shape {
abstract double area(); // no body — must be implemented
public void display() {
System.out.println("Area: " + area());
}
}
class Circle extends Shape {
double radius;
Circle(double r) { radius = r; }
@Override
double area() { return Math.PI * radius * radius; }
}
Also achieved via Interfaces (100% abstraction).
Quick Summary
| Pillar | Keyword | Purpose |
|---|---|---|
| Encapsulation | private + getters/setters | Data protection |
| Inheritance | extends | Code reuse |
| Polymorphism | Overloading / Overriding | Flexibility |
| Abstraction | abstract / interface | Hide complexity |
