接口成员变量只能是public static final常量且需声明时初始化;抽象类成员变量可任意访问权限和修饰符,支持实例变量和可变状态。

接口中的成员变量只能是常量,且自动具备 public static final 修饰符,必须在声明时初始化,之后不可修改。例如:int MAX_SIZE = 100; 等价于 public static final int MAX_SIZE = 100;。
抽象类的成员变量更灵活
抽象类可以定义任意访问权限(private、protected、包级、public)和任意修饰组合(如 static、final、volatile 等)的成员变量。它可以有实例变量,也能有静态变量,甚至可变状态字段。
接口不支持实例状态
接口无法持有对象级别的状态,因为它不能有非 static final 的字段。所有变量本质上都是全局常量,属于类型本身,而非实现类的实例。
常见误用提醒
- 在接口中写
int count;是合法的,但编译后就是public static final int count;,没赋初值会报错 - 抽象类里写
private String name;完全正常,子类继承后可直接使用或通过 getter/setter 访问 - 想让多个实现共享可变配置?用抽象类字段;想定义统一不变的规则值?放接口里更合适


















