Azhagu-swe

  • Home
  • About
  • Experience
  • Skills
  • Projects
  • Contact

  • Tutorial
  • Blog
Beginner
25 min read

A Beginner's Guide to Object-Oriented Programming (OOP)

Published on July 17, 2025

What is Object-Oriented Programming?

Object-Oriented Programming (OOP) is a programming paradigm, or a style of programming, that is centered around the concept of "objects". Instead of thinking about a program as a sequence of commands, OOP encourages us to think about it as a collection of objects that interact with each other.

These objects can contain both data (in the form of fields or attributes) and code (in the form of procedures or methods). This approach helps to structure complex software in a way that is more organized, reusable, and easier to maintain.

The four fundamental principles of OOP are:

  1. Encapsulation
  2. Inheritance
  3. Polymorphism
  4. Abstraction (which is closely related to the others)

Let's explore these concepts using Java.


1. Classes and Objects: The Blueprints and the Real Things

This is the most fundamental concept of OOP.

  • A Class is a blueprint for creating objects. It defines a set of attributes (data) and methods (behaviors) that the objects of that class will have. For example, a Car class could define attributes like color and brand, and methods like startEngine() and drive().
  • An Object is an instance of a class. It's the actual thing created from the blueprint. So, your blue Toyota and your friend's red Honda would be two different objects of the Car class.
java
// This is the blueprint (the Class)
public class Car {
    String color;
    String brand;

    public void drive() {
        System.out.println("The " + color + " " + brand + " is driving.");
    }
}

// Now, let's create and use objects from this class
public class Garage {
    public static void main(String[] args) {
        // Create a new Car object (an instance)
        Car myCar = new Car();
        myCar.color = "Blue";
        myCar.brand = "Toyota";

        // Create another Car object
        Car friendsCar = new Car();
        friendsCar.color = "Red";
        friendsCar.brand = "Honda";

        // Call the method on each object
        myCar.drive();      // Prints "The Blue Toyota is driving."
        friendsCar.drive(); // Prints "The Red Honda is driving."
    }
}

2. Encapsulation: Keeping Things Tidy

Encapsulation is the practice of bundling the data (attributes) and the methods that operate on that data within a single unit (the class). It also involves restricting direct access to some of an object's components, which is a key part of data hiding.

We achieve this by making our fields private and providing public methods (getters and setters) to access and modify them.

java
public class Student {
    // These fields are private and cannot be accessed directly from outside the class
    private String name;
    private int age;

    // Public "getter" method to safely retrieve the name
    public String getName() {
        return this.name;
    }

    // Public "setter" method to safely change the name
    public void setName(String name) {
        this.name = name;
    }
    
    // We can add validation logic in our setters
    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        } else {
            System.out.println("Invalid age.");
        }
    }
    
    public int getAge() {
        return this.age;
    }
}

By encapsulating our data, we prevent outside code from accidentally putting our object into an inconsistent or invalid state.


3. Inheritance: Reusing and Extending

Inheritance is a mechanism where a new class (the subclass or child class) derives attributes and methods from an existing class (the superclass or parent class). This promotes code reuse.

Imagine we have a general Animal class. A Dog is a type of animal, so it can inherit the common properties of an animal and also add its own specific behaviors.

java
// The parent class (superclass)
public class Animal {
    public void eat() {
        System.out.println("This animal eats food.");
    }
}

// The child class (subclass) uses the 'extends' keyword
public class Dog extends Animal {
    // The Dog class also has its own specific method
    public void bark() {
        System.out.println("The dog barks.");
    }
}

// Main class to run the code
public class TestInheritance {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        
        myDog.eat();  // This method was inherited from the Animal class!
        myDog.bark(); // This method is specific to the Dog class.
    }
}

4. Polymorphism: One Form, Many Actions

Polymorphism, which means "many forms," is the ability of an object to take on many forms. The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class object.

It also allows different classes to have methods with the same name, but different implementations. This is often achieved through method overriding, where a subclass provides its own implementation of a method that it inherited from a superclass.

Let's extend our Animal example:

java
public class Animal {
    public void makeSound() {
        System.out.println("The animal makes a sound.");
    }
}

public class Dog extends Animal {
    // Overriding the makeSound method from the parent
    @Override
    public void makeSound() {
        System.out.println("The dog barks: Woof!");
    }
}

public class Cat extends Animal {
    // Overriding the makeSound method from the parent
    @Override
    public void makeSound() {
        System.out.println("The cat meows: Meow!");
    }
}

public class TestPolymorphism {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog(); // An Animal reference, but a Dog object
        Animal myCat = new Cat(); // An Animal reference, but a Cat object
        
        myAnimal.makeSound(); // Prints "The animal makes a sound."
        myDog.makeSound();    // Prints "The dog barks: Woof!"
        myCat.makeSound();    // Prints "The cat meows: Meow!"
    }
}

Even though we are calling the same makeSound() method on variables of type Animal, the program is smart enough to execute the specific version of the method that belongs to the actual object (Dog or Cat).


Conclusion

Understanding these four core principles—Classes/Objects, Encapsulation, Inheritance, and Polymorphism—is the key to mastering Object-Oriented Programming. OOP allows you to write code that is more modular, flexible, and reusable, which is essential for building and maintaining large-scale software applications.

Table of Contents
  • 1. What is Object-Oriented Programming?
  • 2. Classes and Objects: The Blueprints and the Real Things
  • 3. Encapsulation: Keeping Things Tidy
  • 4. Inheritance: Reusing and Extending
  • 5. Polymorphism: One Form, Many Actions
  • 6. Conclusion
Back to All Tutorials
Azhagu-swe

A Full Stack Developer passionate about creating modern, scalable web applications.

Quick Links
Connect With Me

© 2025 Azhagu-swe. All rights reserved.

Crafted with ❤️ By Azhagu-swe