【发布时间】:2013-10-14 01:10:09
【问题描述】:
请看下面的代码——
public interface TestInterface {
public static String NON_CONST_B = "" ;
}
public class Implemented implements TestInterface {
public static String NON_CONST_C = "" ;
}
public class AutoFinal {
public static String NON_CONST_A = "" ;
public static void main(String args[]) {
TestInterface.NON_CONST_B = "hello-b" ;
Implemented.NON_CONST_C = "hello-c";
AutoFinal.NON_CONST_A = "hello-a" ;
Implemented obj = new Implemented();
}
}
但是,编译器抱怨 TestInterface.NON_CONST_B 是最终的 --
AutoFinal.java:6: error: cannot assign a value to final variable NON_CONST_B
TestInterface.NON_CONST_B = "hello-b" ;
^
1 error
为什么?
【问题讨论】:
-
接口中的所有字段默认为
public static final,就像所有方法默认为public abstract一样。 -
@PeterLawrey,从 Java 8 开始,方法可以有
default实现(非abstract)。请参阅:journaldev.com/2389/…。 (也允许使用static方法)。 -
@Mir-Ismaili 在 Java 1 到 18.3 中,方法的默认修饰符是
public abstract,但是如果您将default作为关键字添加到 Java 8 的方法中,您可以给它一个public默认 实现;)Java 9 允许将private方法添加到接口中。