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:
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
staticfields and methods belong to the class, shared by all instances.finalfields can be set only once;finalclasses can't be extended;finalmethods can't be overridden.
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?
publicprotectedprivatestatic
Show answer
Answer: private