2012-06-14 92 views
6

這是什麼意思申報非靜態內部類的final什麼是最終的內部課程?

我已經嘗試過很多google和stackoverflow.com的鏈接,但它們似乎都是關於訪問最終成員而不是最終內部類本身的內部類。 我發現谷歌this鏈接,但即使它沒有解釋它。

Thanx提前!

+0

看到這裏http://en.wikipedia.org/wiki/Final_%28Java%29#Final_classes – user845279

+2

爲什麼你會希望它意味着什麼作出的頂級級決賽有什麼不同? –

+0

以及因爲內部類是一個類,但它也是外部類的成員。那麼它會是不可繼承的,還是會因爲最終的原因而出現其他一些行爲? –

回答

0

它具有相同的語義被宣佈最終外部類:類不能擴展。如果添加的最後修改器就會產生一個編譯錯誤

public class MyClass { 
    public class A { 
    } 
    public class B extends A { 
    } 
} 

考慮這個例子。

+0

thnx!我怎樣才能從外部類擴展非最終的內部類? 'TestClass擴展MyOuter.MyInner'? –

+0

TestClass需要一個帶MyOuter的構造函數。然後你打電話給MyOuter的超級方法。 –

+0

@SurenderThakran我認爲這是唯一可能的,如果你試圖擴展的內部類是靜態的。看到這[繼承矩陣](http://mindprod.com/jgloss/nestedclasses.html#INHERITANCE) – user845279

5

製作頂級類final和製作內部類final之間沒有語義上的區別:它告訴編譯器您不能從類繼承。標記類final有時會讓編譯器跳過虛擬表查找,但這通常被認爲是過早的微優化。

0

那麼,內類不是從在這方面外類不同的任何方式。所以下面的代碼是完全有效的。

class Outer { 
int some_member; 

class Inner { 
void method(); 
} 
} 

class OuterExtendsInner extends Outer.Inner{ 

} 

大家都知道,聲明類最終的目的是我們防止任何外部入侵者繼承類,並利用其設施,以同樣的方式,我們可以在內部類的情況下做的。