這是什麼意思申報非靜態內部類的final
?什麼是最終的內部課程?
我已經嘗試過很多google和stackoverflow.com的鏈接,但它們似乎都是關於訪問最終成員而不是最終內部類本身的內部類。 我發現谷歌this鏈接,但即使它沒有解釋它。
Thanx提前!
這是什麼意思申報非靜態內部類的final
?什麼是最終的內部課程?
我已經嘗試過很多google和stackoverflow.com的鏈接,但它們似乎都是關於訪問最終成員而不是最終內部類本身的內部類。 我發現谷歌this鏈接,但即使它沒有解釋它。
Thanx提前!
它具有相同的語義被宣佈最終外部類:類不能擴展。如果添加的最後修改器就會產生一個編譯錯誤
public class MyClass {
public class A {
}
public class B extends A {
}
}
:
考慮這個例子。
thnx!我怎樣才能從外部類擴展非最終的內部類? 'TestClass擴展MyOuter.MyInner'? –
TestClass需要一個帶MyOuter的構造函數。然後你打電話給MyOuter的超級方法。 –
@SurenderThakran我認爲這是唯一可能的,如果你試圖擴展的內部類是靜態的。看到這[繼承矩陣](http://mindprod.com/jgloss/nestedclasses.html#INHERITANCE) – user845279
製作頂級類final
和製作內部類final
之間沒有語義上的區別:它告訴編譯器您不能從類繼承。標記類final
有時會讓編譯器跳過虛擬表查找,但這通常被認爲是過早的微優化。
那麼,內類不是從在這方面外類不同的任何方式。所以下面的代碼是完全有效的。
class Outer {
int some_member;
class Inner {
void method();
}
}
class OuterExtendsInner extends Outer.Inner{
}
大家都知道,聲明類最終的目的是我們防止任何外部入侵者繼承類,並利用其設施,以同樣的方式,我們可以在內部類的情況下做的。
看到這裏http://en.wikipedia.org/wiki/Final_%28Java%29#Final_classes – user845279
爲什麼你會希望它意味着什麼作出的頂級級決賽有什麼不同? –
以及因爲內部類是一個類,但它也是外部類的成員。那麼它會是不可繼承的,還是會因爲最終的原因而出現其他一些行爲? –