Java OOP

Object-oriented programming in Java: classes, objects, inheritance, polymorphism, and encapsulation.

Class & Object

// Define class
public class Person {
    // Fields (properties)
    private String name;
    private int age;
    
    // Constructor
    public Person(String name, int age) {
        this.name = name;  # this = current object
        this.age = age;
    }
}

// Create object
Person p = new Person("John", 25);

Getters & Setters

// Getter method
public String getName() {
    return name;  # read value
}

// Setter method
public void setName(String name) {
    this.name = name;  # update value
}

Inheritance

// Parent class
public class Animal {
    public void eat() {
        System.out.println("Eating");
    }
}

// Child class
public class Dog extends Animal {  # inherits from Animal
    public void bark() {
        System.out.println("Woof!");
    }
}

Method Overriding

// Override parent method
@Override  # annotation
public void eat() {
    System.out.println("Dog is eating");
}

// Call parent method
super.eat();  # call Animal.eat()

Abstract Class

// Abstract class
public abstract class Shape {
    abstract void draw();  # no implementation
    
    public void display() {
        System.out.println("Shape");  # regular method
    }
}

// Implement abstract class
class Circle extends Shape {
    void draw() {
        System.out.println("Circle");  # must implement
    }
}

Interface

// Define interface
public interface Drawable {
    void draw();  # all methods abstract
}

// Implement interface
public class Rectangle implements Drawable {
    public void draw() {
        System.out.println("Rectangle");
    }
}

Polymorphism

// Runtime polymorphism
Animal animal = new Dog();  # parent reference, child object
animal.eat();  # calls Dog eat()

// Interface polymorphism
Drawable shape = new Circle();
shape.draw();  # calls Circle draw()

Encapsulation

// Private fields with public methods
public class BankAccount {
    private double balance;  # hidden from outside
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;  # controlled access
        }
    }
    
    public double getBalance() {
        return balance;
    }
}