Java OOP(Object Oriented Programming) Concepts (original) (raw)

**Java Object-Oriented Programming (OOPs) is a fundamental concept in Java that every developer must understand. It allows developers to structure code using **classes and objects, making it more modular, reusable, and scalable.

The core idea of **OOPs is to bind data and the functions that operate on it, preventing unauthorized access from other parts of the code. Java strictly follows the DRY (Don't Repeat Yourself) Principle, ensuring that common logic is written once (e.g., in parent classes or utility methods) and reused throughout the application. This makes the code:

In this article, we will explore how **OOPs works in Java using classes and objects. We will also dive into its **four main pillars of OOPs that are, **Abstraction, Encapsulation, Inheritance, and **Polymorphism with examples.

What is OOPs and Why Do We Use it?

OOPS stands for **Object-Oriented Programming System. It is a programming approach that organizes code into objects and classes and makes it more structured and easy to manage. A class is a blueprint that defines properties and behaviors, while an object is an instance of a class representing real-world entities.

**Example:

Java `

// Use of Object and Classes in Java import java.io.*;

class Numbers { // Properties private int a; private int b;

// Setter methods
public void setA(int a) { this.a = a; }
public void setB(int b) { this.b = b; }

// Methods
public void sum() { System.out.println(a + b); }
public void sub() { System.out.println(a - b); }

public static void main(String[] args)
{
    Numbers obj = new Numbers();

    // Using setters instead of direct access
    obj.setA(1);
    obj.setB(2);

    obj.sum();
    obj.sub();
}

}

`

It is a simple example showing a class Numbers containing two variables which can be accessed and updated only by instance of the object created.

Java Class

A Class is a user-defined blueprint or prototype from which objects are created. It represents the set of properties or methods that are common to all objects of one type. Using classes, you can create multiple objects with the same behavior instead of writing their code multiple times. This includes classes for objects occurring more than once in your code. In general, class declarations can include these components in order:

Java Object

An Objectis a basic unit of Object-Oriented Programming that represents real-life entities. A typical Java program creates many objects, which as you know, interact by invoking methods. The objects are what perform your code, they are the part of your code visible to the viewer/user. An object mainly consists of:

**Example:

Java `

// Java Program to demonstrate // Use of Class and Objects

// Class Declared public class Employee { // Instance variables (non-static) private String name; private float salary;

// Constructor
public Employee(String name, float salary) {
    this.name = name;
    this.salary = salary;
}

// getters method
public String getName() { return name; }
public float getSalary() { return salary; }

// setters method
public void setName(String name) { this.name = name; }
public void setSalary(float salary) { this.salary = salary; }

// Instance method
public void displayDetails() {
    System.out.println("Employee: " + name);
    System.out.println("Salary: " + salary);
}

public static void main(String[] args) {
    Employee emp = new Employee("Geek", 10000.0f);
    emp.displayDetails();
}

}

`

Output

Employee: Geek Salary: 10000.0

Note: For more information, please refer to the article - **Classes and Object.

**The below diagram demonstrates the Java OOPs Concepts

Method and Method Passing

A method is a collection of statements that perform specific tasks and return a result to the caller. It can be declared with or without arguments, depending on the requirements. A method can take input values, perform operations, and return a result.

**Example:

Java `

// Class Method and Method Passing class Student { private int id;
private String name;

// Constructor for initialization
public Student(int id, String name) {
    this.id = id;
    this.name = name;
}

// method demonstrating parameter passing
public void printStudent(String header) {
    System.out.println(header);
    System.out.println("ID: " + getId());
    System.out.println("Name: " + getName());
}

// Getter methods
public int getId() { return id; }
public String getName() { return name; }

}

class Main { public static void main(String[] args) { // Proper initialization Student obj = new Student(28, "Geek");
// Method with parameter obj.printStudent("Student Details:"); } }

`

Output

Student Details: ID: 28 Name: Geek

4 Pillars of Java OOPs Concepts

Object-Oriented-Programming-(OOPs)-Concept-in-Java

**1. Abstraction

**Data Abstraction is the property by virtue of which **only the essential details are displayed to the user. The trivial or non-essential units are not displayed to the user. Data Abstraction may also be defined as the process of identifying only the required characteristics of an object, ignoring the irrelevant details. The properties and behaviors of an object differentiate it from other objects of similar type and also help in classifying/grouping the object.

**Real-life Example: Consider a real-life example of a man driving a car. The man only knows that pressing the accelerators will increase the car speed or applying brakes will stop the car, but he does not know how on pressing the accelerator, the speed is actually increasing. He does not know about the inner mechanism of the car or the implementation of the accelerators, brakes etc. in the car. This is what abstraction is.

**Note: In Java, abstraction is achieved by interfaces and abstract classes. We can achieve 100% abstraction using interfaces.

**Example:

Java `

// Abstract class representing a Vehicle (hiding implementation details) abstract class Vehicle { // Abstract methods (what it can do) abstract void accelerate(); abstract void brake();

// Concrete method (common to all vehicles)
void startEngine() {
    System.out.println("Engine started!");
}

}

// Concrete implementation (hidden details) class Car extends Vehicle { @Override void accelerate() { System.out.println("Car: Pressing gas pedal..."); // Hidden complex logic: fuel injection, gear shifting, etc. }

@Override
void brake() {
    System.out.println("Car: Applying brakes...");
    // Hidden logic: hydraulic pressure, brake pads, etc.
}

}

public class Main { public static void main(String[] args) { Vehicle myCar = new Car(); myCar.startEngine();
myCar.accelerate();
myCar.brake();
} }

`

**Note: To learn more about the Abstraction refer to the **Abstraction in Java article

**2. Encapsulation

It is defined as the **wrapping up of data under a single unit. It is the mechanism that binds together the code and the data it manipulates. Another way to think about encapsulation is that it is a protective shield that prevents the data from being accessed by the code outside this shield.

**Example:

Java `

// Encapsulation using private modifier

class Employee { // Private fields (encapsulated data) private int id; private String name;

// Setter methods 
public void setId(int id) {
    this.id = id;
}

public void setName(String name) {
    this.name = name;
}

// Getter methods
public int getId() {
    return id;
}

public String getName() {
    return name;
}

}

public class Main { public static void main(String[] args) { Employee emp = new Employee();

    // Using setters
    emp.setId(101);
    emp.setName("Geek");

    // Using getters
    System.out.println("Employee ID: " + emp.getId());
    System.out.println("Employee Name: " + emp.getName());
}

}

`

Output

Employee ID: 101 Employee Name: Geek

**Note: To learn more about topic refer to **Encapsulation in Javaarticle.

**3. Inheritance

Inheritance is an important pillar of OOP (Object Oriented Programming). It is the mechanism in Java by which one class is allowed to inherit the features (fields and methods) of another class. We are achieving inheritance by using **extends keyword. Inheritance is also known as "**is-a" relationship.

Let us discuss some frequently used important terminologies:

**Example:

Java `

// Superclass (Parent) class Animal { void eat() { System.out.println("Animal is eating..."); }

void sleep() {
    System.out.println("Animal is sleeping...");
}

}

// Subclass (Child) - Inherits from Animal class Dog extends Animal { void bark() { System.out.println("Dog is barking!"); } }

public class Main { public static void main(String[] args) { Dog myDog = new Dog();

    // Inherited methods (from Animal)
    myDog.eat();    
    myDog.sleep();  

    // Child class method
    myDog.bark();   
}

}

`

Output

Animal is eating... Animal is sleeping... Dog is barking!

**Note: To learn more about topic refer to **Inheritance in Java article.

**4. **Polymorphism

It refers to the ability of object-oriented programming languages t**o differentiate between entities with the same name efficiently. This is done by Java with the help of the signature and declaration of these entities. The ability to appear in many forms is called polymorphism.

**Example:

Java `

sleep(1000) //millis sleep(1000,2000) //millis,nanos

`

Types of Polymorphism

Polymorphism in Java is mainly of 2 types as mentioned below:

  1. Method Overloading
  2. Method Overriding

**Method Overloading and Method Overriding

**1. Method Overloading: Also, known as **compile-time polymorphism, is the concept of Polymorphism where more than one method share the same name with different signature(Parameters) in a class. The return type of these methods can or cannot be same.

**2. Method Overriding: Also, known as run-time polymorphism,is the concept of Polymorphism where method in the child class has the same name, return-type and parameters as in parent class. The child class provides the implementation in the method already written.

**Below is the implementation of both the concepts:

Java `

// Java Program to Demonstrate // Method Overloading and Overriding

// Parent Class class Parent { // Overloaded method (compile-time polymorphism) public void func() { System.out.println("Parent.func()"); }

// Overloaded method (same name, different parameter)
public void func(int a) {
    System.out.println("Parent.func(int): " + a);
}

}

// Child Class class Child extends Parent { // Overrides Parent.func(int) (runtime polymorphism) @Override public void func(int a) { System.out.println("Child.func(int): " + a); } }

public class Main { public static void main(String[] args) { Parent parent = new Parent(); Child child = new Child(); // Dynamic dispatch Parent polymorphicObj = new Child();

    // Method Overloading (compile-time)
    parent.func();       
    parent.func(10);    

    // Method Overriding (runtime)
    child.func(20);     

    // Polymorphism in action
    polymorphicObj.func(30);  
}

}

`

Output

Parent.func() Parent.func(int): 10 Child.func(int): 20 Child.func(int): 30

Advantage of OOPs over Procedure-Oriented Programming Language

Object-oriented programming (OOP) offers several key advantages over procedural programming:

Disadvantages of OOPs

Conclusion

The Object Oriented Programming (OOPs) concept in Java is a powerful way to organize and write code. It uses key ideas like classes, objects, inheritance, polymorphism, encapsulation, and abstraction to create flexible and reusable code.

By using the Java OOPs concept, programmers can build complex applications more efficiently, making the code easier to manage, understand, and modify. Overall, Java's OOPs concepts help in creating robust and scalable software solutions.