2017-02-25 83 views
-1

這是我的Java代碼:嵌套Interafce在Java

class A { 
    interface That { 
     void show(); 
    } 
} 

class B implements A.That { 
    public void show() { 
     System.out.println("Hi"); 
    } 
} 

public class MainClass { 
    public static void main(String args[]) { 
     A obj = new A(); 
     obj.That object = new B(); 
     object.show(); 
    } 
} 

由於A是一個類(不是抽象的),我們可以創建它的實例,並比我們可以使用實例的成員。現在界面是成員,所以obj.That應該工作,但javac說obj.That不是包。爲什麼?

+1

你能編輯你的問題以包含完整的錯誤信息嗎? –

+0

[Java內部類和靜態嵌套類]的可能重複(http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class) – DimaSan

回答

3

當嵌套在類中時,接口總是靜態的。因此,您應該訪問您的界面聲明A.That,而不是obj.That

+0

但是我們可以使用實例訪問靜態成員,所以爲什麼不能接口? –

+0

如果'那個'是一個類而不是一個接口,那麼你也不能說'obj.That'。無論是接口還是類,或者是枚舉,或者什麼都不要,你總是應該把類型稱爲'A.That'。 –

+0

「Compilable」!=「優選」。不要通過實例引用靜態成員。你不需要在這裏實例化一個'A'實例。 –