AnyCompiler

Encapsulation

Ek field ko private mark karna class ke bahar ke code ko use directly touch karne se rokta hai — ab class apne invariants guarantee kar sakta hai, kyunki uski state change karne ka ekmatra tarika un methods se hai jo woh expose karna chunta hai, jaise neeche deposit.

public class Main {
    static class BankAccount {
        private double balance;

        BankAccount(double initial) {
            balance = initial;
        }

        double getBalance() {
            return balance;
        }

        void deposit(double amount) {
            balance += amount;
        }
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount(100.0);
        account.deposit(50.0);
        System.out.println("Balance: " + account.getBalance());
    }
}
Output
Balance: 150.0

balance ko BankAccount ke bahar se kabhi bhi ek invalid value par set nahi kiya ja sakta, kyunki class ke bahar koi bhi cheez field ko directly reach nahi kar sakti — har change ko deposit se guzarna padta hai, jise class completely control karta hai.

Aage: inheritance — extends, super, aur @Override se ek method ko override karna.

Practice exercise

Ek class Temperature define karo jiska ek private double celsius ho, ek constructor jo use set kare, aur ek method getFahrenheit() jo celsius * 9.0 / 5.0 + 32.0 return kare. celsius 100.0 wali ek Temperature banao aur uska Fahrenheit value print karo.