Introduction

Welcome! Today's subject is Encapsulation, a cornerstone of Object-Oriented Programming (OOP). Encapsulation bundles data and the operations that we perform on them into one unit, namely, an object. It guards data against unwanted alterations, ensuring the creation of robust and maintainable software.

Prepare yourself for an exciting journey as we delve into how encapsulation works in Java and explore the vital role it plays in data privacy.

Unraveling Encapsulation

Starting with the basics, encapsulation is similar to packing data and the methods that modify this data into a single compartment known as a class. It safeguards the data in an object from external interference.

To illustrate, consider a Java class representing a bank account. Without encapsulation, the account balance could be directly altered. With encapsulation, however, the balance can only change through specified methods, like depositing or withdrawing.

public class BankAccount {
    public double balance; // no encapsulation

    // Method to withdraw
    public void withdraw(double amount) {
        this.balance -= amount;
    }

    // Method to deposit
    public void deposit(double amount) {
        this.balance += amount;
    }
}

public class Main {
    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        account.balance += 1000; // directly accessing the balance
    }
}
Encapsulation: Guardian of Data Privacy

Encapsulation restricts direct access to an object's data and prevents unwanted data alteration. This principle is comparable to window blinds, allowing you to look out while preventing others from peeping in.

In Java, encapsulation pertains to private and public attributes, which are integral to data privacy. Private attributes, indicated by the private keyword, require caution while being manipulated.

To illustrate, let's consider a Java class named Person, which includes a private attribute name.

public class Person {
    // Private attribute
    private String name;

    // Constructor
    public Person(String name) {
        this.name = name;
    }

    // Accessor method
    public String getName() {
        return this.name;
    }

    public static void main(String[] args) {
        Person person = new Person("Alice");
        System.out.println(person.getName());  // Accessing private attribute via accessor method. Output: Alice
        // The following line would cause an error due to private access:
        // System.out.println(person.name);
    }
}

In this example, name is private, and getName() enables us to access name. However, we don't provide a method to change the name, preventing alterations.

In Java, all class members are public by default only within the same package. To designate an attribute as private, we use the private keyword.

Sign up
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal