Access Modifiers in OOP

Understanding visibility and accessibility in Object-Oriented Programming

What are Access Modifiers?

Access modifiers in Java are keywords that specify the accessibility or scope of a class, method, or variable. They control where these members can be accessed from. Java provides four types of access modifiers: public, protected, default (no modifier), and private.

Access Modifiers Kya Hain? (Hinglish)

Java mein access modifiers wo keywords hain jo class, method, ya variable ki accessibility ya scope ko specify karte hain. Ye control karte hain ki in members ko kahan se access kiya ja sakta hai. Java char types ke access modifiers provide karta hai: public, protected, default (no modifier), aur private.

Types of Access Modifiers

Modifier Class Package Subclass World
public Yes Yes Yes Yes
protected Yes Yes Yes No
default Yes Yes No No
private Yes No No No

Example Program

// Public class accessible from anywhere
public class Student {
    // Private variable accessible only within this class
    private String name;
    
    // Protected variable accessible in this class and subclasses
    protected int rollNumber;
    
    // Default variable accessible in this package
    String department;
    
    // Public variable accessible from anywhere
    public String university;
    
    // Private constructor
    private Student() {
        // Can only be called from within this class
    }
    
    // Public constructor
    public Student(String name, int rollNumber) {
        this.name = name;
        this.rollNumber = rollNumber;
    }
    
    // Protected method accessible in this class and subclasses
    protected void displayRollNumber() {
        System.out.println("Roll Number: " + rollNumber);
    }
    
    // Public method accessible from anywhere
    public void displayInfo() {
        System.out.println("Name: " + name);
        displayRollNumber();
    }
    
    // Default method accessible in this package
    void setDepartment(String department) {
        this.department = department;
    }
}

// Subclass in the same package
class CollegeStudent extends Student {
    public CollegeStudent(String name, int rollNumber) {
        super(name, rollNumber);
    }
    
    public void showDetails() {
        // Can access protected and public members
        displayRollNumber();
        displayInfo();
        
        // Can access default members in same package
        setDepartment("Computer Science");
        
        // Cannot access private members
        // System.out.println(name); // Error
    }
}

// Class in a different package
package anotherpackage;

import Student;

public class University {
    public void processStudent(Student student) {
        // Can access only public members
        student.displayInfo();
        student.university = "ABC University";
        
        // Cannot access protected, default, or private members
        // student.displayRollNumber(); // Error
        // student.setDepartment("Math"); // Error
        // student.name = "John"; // Error
    }
}
                    

Program Explanation (Hinglish)

Is program mein humne different access modifiers ka use kiya hai:

  • Private Members: name variable aur private constructor jo sirf class ke andar access ho sakte hain
  • Protected Members: rollNumber variable aur displayRollNumber() method jo class aur subclasses mein access ho sakte hain
  • Default Members: department variable aur setDepartment() method jo same package mein access ho sakte hain
  • Public Members: university variable aur displayInfo() method jo kahi se bhi access ho sakte hain

Important Points

  • Public members are accessible from anywhere
  • Protected members are accessible in the same package and subclasses
  • Default members are accessible only in the same package
  • Private members are accessible only within the same class
  • Access modifiers help in encapsulation and data hiding