Java 修饰符

四种访问控制修饰符与 static、final、abstract、synchronized 等非访问修饰符。

Beginner
Key Points访问范围从小到大:private < default < protected < public;final 修饰变量不可改、方法不可重写、类不可继承。

访问控制修饰符

Four modifiers decide visibility. default is not a keyword but the state when you write nothing — visible within the same package only.

ModifierClassPackageSubclassWorld
private✔✘✘✘
default✔✔✘✘
protected✔✔✔✘
public✔✔✔✔
Java
public class Access {
    private int a = 1;
    int b = 2;
    protected int c = 3;
    public int d = 4;

    public static void main(String[] args) {
        Access o = new Access();
        System.out.println(o.a + o.b + o.c + o.d);
    }
}
Output
10

非访问修饰符

static makes a member belong to the class, final freezes a variable, method or class, abstract declares an unimplemented method, synchronized locks a method for thread safety, and transient skips a field during serialization.

ModifierApplies toEffect
staticfield / method / blockBelongs to the class
finalfield / method / classNo reassign / override / extend
abstractclass / methodMust be implemented by subclass
synchronizedmethod / blockMutual exclusion lock
transientfieldExcluded from serialization
volatilefieldAlways read from main memory
Java
public class NonAccess {
    static int counter = 0;
    final int limit = 5;

    static void inc() {
        counter++;
    }

    public static void main(String[] args) {
        inc();
        inc();

        System.out.println(counter);
        System.out.println(new NonAccess().limit);
    }
}
Output
2
5
final on a reference forbids reassignment, not mutation: final List<String> list still allows list.add(...).

Friends & Partners