2011-04-08 77 views
4

爲什麼不能一個java嵌套接口非靜態?爲什麼內部類不能包含靜態非最終成員?Java的嵌套接口和內部類

我遇到問題就經歷高斯林,而並沒有能還找出了答案。

+7

你經歷了高斯林?他不介意嗎? – 2011-04-08 10:16:40

+1

@Joachim紹爾http://instantrimshot.com/ – 2011-04-08 10:32:06

回答

8

如果嵌套類是非靜態的(即內部類),這意味着它的每個實例綁定到外部類的一個實例。由於接口沒有自己的實例,所以實現類似乎並沒有被綁定到外部對象,所以默認情況下它是靜態的,似乎是合理的。

+0

「內部類是一個嵌套類,它是不明確或隱含聲明爲靜態的。[...]會員接口(8.5節)總是靜態的,使他們永遠不會被視爲成爲內心階層。「從http://java.sun.com/docs/books/jls/third_edition/html/classes.html – 2011-04-08 10:37:14

+1

報價因此,有作爲一個內部類,接口,沒有這樣的事 – 2011-04-08 10:38:08

+2

@Zoltan:此問題已** **的原因是有沒有這樣的事情? – 2011-04-08 10:40:37

2

我不知道爲什麼你不能有靜態非最終成員內部類,但由於靜態成員不綁定到任何特定的對象實例沒有區別無論是在內部或外部類。

E.g.

class OuterClass { 

    private static int staticMember; 

    class InnerClass { 

    void incStatic() { 
     staticMember++; 
    } 

    } 

} 

您可以從內部類訪問靜態成員,就好像它在內部類中一樣。