看板 java 關於我們 聯絡資訊
根據 The Java Language Specification Java SE 7 Edition P.187 Member interfaces (§8.5) are implicitly static so they are never considered to be inner classes. 所以只要是member interface (你也可以叫nested interface)都是會自動成為 static ,不管你有沒有寫出static這個關鍵字. /* Test.java */ import static com.demo.now.Test3.Interface; public class Test{ public static void main(String[] args){ Interface iface = new Interface(){ public void method(){ System.out.println("hello"); } }; iface.method(); } } /*Test3.java*/ package com.demo.now; public class Test3{ public interface Interface{ public final int CONSTANT = 12345; public void method(); } } 我的問題是,我把別的套件內的物件的member interface (nested interface) import進來時,因為member interface是自動成為static的,所以應該是要這樣寫 import static com.demo.now.Test3.Interface; 也就是我上面po出的完整程式碼的內容 是可以成功編譯跟執行的 但是我發現你把static拿掉變成 import com.demo.now.Test3.Interface; 還是能夠編譯成功,程式也能正常執行 有人能夠解釋為什麼可以成功編譯嗎? 就我所學的,當我寫成 import com.demo.now.Test3.Interface; javac應該要抱怨找不到Interface不是嗎? 而且這個現象只發生在nested interface上 要是static nested class就一定要用import static 的語法才能成功編譯 否則javac會出現error 說找不到你所指的static nested class 我用的是javac 1.7.0_40 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.231.237.10
sbrhsieh:會這樣嗎?interface/class 應該都可不 static import 10/25 00:39