請參閱下面的代碼 -爲什麼編譯器說,在界面中的公共靜態字段是「最終的」,雖然它不是
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')。請參閱:https://www.journaldev.com/2389/java-8-features-with-examples#interface-default-static-method。 (也允許'static'方法)。 –
@ Mir-Ismaili在Java 1到18.3中,方法的缺省修飾符是'public abstract',但是如果將'default'作爲關鍵字添加到Java 8的方法中,則可以給它一個'public' * default *實現;) Java 9允許將'private'方法添加到接口中。 –