Java Tutorial · Object-Oriented Java · Lesson 20 of 37

Java Encapsulation and Modifiers

Access modifiers, getters and setters, static and final.

Access modifiers

Modifier Visible to
public everyone
protected same package and subclasses
(none) same package only
private the class itself

Encapsulation means keeping fields private and exposing safe methods, so an object can enforce its own rules:

Example 1
public class Main {
    public static void main(String[] args) {
        BankAccount acct = new BankAccount("Ada");
        acct.deposit(100);
        acct.withdraw(30);
        System.out.println(acct.getOwner() + ": " + acct.getBalance());
        try {
            acct.withdraw(500);
        } catch (IllegalArgumentException e) {
            System.out.println("Rejected: " + e.getMessage());
        }
    }
}

class BankAccount {
    private final String owner;
    private double balance;

    BankAccount(String owner) {
        this.owner = owner;
    }

    public String getOwner() { return owner; }
    public double getBalance() { return balance; }

    public void deposit(double amount) {
        if (amount <= 0) throw new IllegalArgumentException("Deposit must be positive");
        balance += amount;
    }

    public void withdraw(double amount) {
        if (amount > balance) throw new IllegalArgumentException("Insufficient funds");
        balance -= amount;
    }
}

Output

Ada: 70.0
Rejected: Insufficient funds

Run this on your computer — see “Get Started” for setup.

static and final

  • static fields and methods belong to the class, shared by all instances.
  • final fields can be set only once; final classes can't be extended; final methods can't be overridden.
Example 2
public class Main {
    public static void main(String[] args) {
        new Ticket();
        new Ticket();
        Ticket t = new Ticket();
        System.out.println("Ticket #" + t.number + " of " + Ticket.issued);
        System.out.println(Ticket.PREFIX + t.number);
    }
}

class Ticket {
    static final String PREFIX = "TKT-";
    static int issued = 0;
    final int number;

    Ticket() {
        issued++;
        number = issued;
    }
}

Output

Ticket #3 of 3
TKT-3

Run this on your computer — see “Get Started” for setup.

Test yourself

Which access modifier makes a field visible only inside its own class?

  1. public
  2. protected
  3. private
  4. static
Show answer

Answer: private