Java 修饰符

一、访问修饰符(Access Modifiers)

控制类、方法、变量的可见性范围,共 4 种:

1、public

  • 作用范围:任何地方均可访问。

  • 适用场景:开放给外部使用的类、方法、变量。

public class Car {  // 类可以被其他包访问
    public String brand;  // 变量可以被外部直接访问
}

2、private

  • 作用范围:仅在当前类内部可见。

  • 适用场景:封装敏感数据,保护内部逻辑。

public class Car {
    private String engineCode; // 只有 Car 类内部能访问
    public void setEngine(String code) { 
        this.engineCode = code; // 通过公有方法间接修改私有变量
    }
}

3、protected

  • 作用范围:同一包内所有类 + 不同包中的子类

  • 适用场景:允许子类继承,但限制外部包直接访问。

public class Vehicle {
    protected int speed; // 子类(即使在不同包)可以访问
}

class Car extends Vehicle {
    void accelerate() {
        speed += 10; // 子类可以直接使用 protected 变量
    }
}

4、默认(无修饰符)

  • 作用范围:仅限同一包内。

  • 适用场景:包内协作,对外隐藏。

class Helper {  // 默认修饰符的类,只能在当前包内使用
    void doTask() { ... }
}

二、非访问修饰符(Non-Access Modifiers)

控制类、方法、变量的行为特性,常见的有:

1. static
  • 作用:属于类本身,而非类的实例。

  • 适用场景:工具方法、共享变量。

public class MathUtils {
    public static final double PI = 3.14; // 静态常量
    public static int add(int a, int b) { // 静态方法
        return a + b;
    }
}

// 使用:无需创建对象
MathUtils.add(2, 3);

2. final

  • 作用:不可修改或继承。

    • :不能被继承。

    • 方法:不能被子类覆盖(Override)。

    • 变量:值/引用不可变(常量)。

final class Constants { // 不可被继承
    public static final String APP_NAME = "MyApp";
}

class Parent {
    final void show() { // 子类不能覆盖此方法
        System.out.println("Parent");
    }
}

3. abstract

  • 作用:定义抽象类或抽象方法,需子类实现。

  • 适用场景:定义模板或接口规范。

abstract class Animal { // 抽象类,不能实例化
    abstract void makeSound(); // 抽象方法,无实现
}

class Dog extends Animal {
    void makeSound() { // 必须实现抽象方法
        System.out.println("Woof!");
    }
}
4. transient 和 volatile(了解即可)
  • transient:序列化时忽略该变量。

  • volatile:多线程中保证变量可见性。

三、修饰符组合规则

  • 类修饰符publicdefaultfinalabstract

    • 不能同时用 final 和 abstract(矛盾)。

  • 方法修饰符:可组合如 public staticprotected abstract 等。

  • 变量修饰符:如 private final(常用组合)。

你可能感兴趣的:(java,开发语言)