接口中的成员变量默认为public static final常量,只能通过接口名访问,不可实例化调用或在实现类中重定义;多接口同名常量需显式限定。

接口中的成员变量默认就是 public static final,本质是常量,只能通过接口名直接访问,不能用实例或子类对象调用。
直接用接口名调用(推荐且唯一正确方式)
因为是 static 的,所以必须通过接口类型本身访问,就像调用静态字段一样:
-
✅ 正确写法:
MyInterface.CONSTANT_NAME -
❌ 错误写法:
new MyInterface().CONSTANT_NAME(接口不能实例化) -
❌ 错误写法:
obj.CONSTANT_NAME(即使实现类对象也不该这样用)
在实现类中可以直接使用,但本质仍是接口名访问
实现类可以不加前缀直接使用常量,编译器会自动补全为接口名引用:
- 定义接口:
interface MyInterface { int MAX_SIZE = 100; } - 实现类中:
System.out.println(MAX_SIZE);→ 编译后等价于System.out.println(MyInterface.MAX_SIZE); - 注意:如果多个接口有同名常量,必须显式用接口名限定,否则编译报错
不能在实现类中重新赋值或隐藏
由于是 final,任何试图修改或“重定义”的操作都会失败:
-
MAX_SIZE = 200;→ 编译错误:无法为最终变量赋值 -
int MAX_SIZE = 200;在实现类中声明 → 编译错误:重复定义(除非是不同作用域,但语义上不建议) - 接口常量不可被继承覆盖,只可被直接引用
多个接口常量冲突时需显式指定
当一个类同时实现多个含同名常量的接口时,必须用接口名明确调用:
interface A { int VALUE = 1; }interface B { int VALUE = 2; }class C implements A, B { void f() { System.out.println(A.VALUE); } }- 直接写
VALUE会编译失败:对 VALUE 的引用不明确
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











