歡迎學習 Java 基礎文章系列之 final 關鍵字
- final 代表什么意思?
- final 通常是指無法被改變或者不能被改變的,什么情況下不想被改變呢?
- 不想改變可能有兩種原因:設計或者效率。
- final 通常是指無法被改變或者不能被改變的,什么情況下不想被改變呢?
- 在Java中 final 關鍵字會在哪幾個地方使用到?
- 有三種地方使用:數據(成員變量、參數)、方法、類。
- final 數據(成員變量、參數)
常量以關鍵 final 表示,必須是基本數據類型。
對於基本類型使數值恆定不變,而用於對象引用,使引用恆定不變,一旦引用被初始化指向一個對象,就無法改為指向另一個對象,然而對象其自身卻是可以被修改的,Java 並未提供使任何對象恆定不變的途徑(但是可以自己編寫類已取得是對象恆定不變的效果),這一限制同樣適用於數組,它也是對象。- 空白 final
Java 允許生成:“空白 final”,即被聲明為 final 但又未給定初始值的域。 - final 參數
Java中允許在參數列表中以聲明的方式將參數指明為 final。無法在方法中更改參數引用所指向的對象。
你可以讀取參數,但卻無法修改參數,這一特性主要用來向匿名類傳遞數據。
- 空白 final
- final 方法
final 方法的考慮:出於對設計的考慮:確保在繼承中使方法行為保持不變,並且不會被覆蓋,或者出於效率(遭受勸退了)。
該方法不會被重寫(覆蓋、覆寫)。
final 和 private 關鍵字
類中所有的 private 方法都是隱式地指定為 final 的。由於無法使用 private 聲明的方法,所以也就無法重寫該方法。
如果試圖重寫一個 private 方法(隱含式的 final),似乎是可行的,並且編譯器也不會提示錯誤。
“重寫(覆蓋、覆寫)”只有在某方法是父類的接口(非interface)的一部分時才會出現。
final修飾的方法在特定的訪問權限下可以被繼承。
這是因為,方法是否被final修飾與方法的訪問權限是兩回事,沒有任何關系,被final修飾的方法和未被final修飾的方法都可以自由的指定訪問權限。
我們有興趣去談論final關鍵字和訪問權限關鍵字在修飾方法的過程的起到的作用,如下表(聲明:final和訪問權限是兩個獨立的概念,沒有任何比較意義,所有本表僅方便讀者理解,不可作為正統知識)
- final 數據(成員變量、參數)
- 有三種地方使用:數據(成員變量、參數)、方法、類。
protect關鍵字 | final關鍵字 | private關鍵字 | |
---|---|---|---|
是否可以繼承 | 是 | 是 | 否 |
是否可以重寫 | 是 | 否 | 否 |
小結 | private < final < protect (僅適用於方法) |
正如上表所示,private實現了final方法不可重寫的功能,並附加不可繼承功能。(再次聲明:final和訪問權限是兩個獨立的概念,沒有任何比較意義,所有上表僅方便讀者理解,不可作為正統知識)可以對private方法添加final關鍵字,但是這種做法沒有任何意義。
* final 類
final 類的考慮:對該類的設計永不需要做任何變動,或者出於安全的考慮不希望它有子類。
該類不能被繼承,final 類中所有的方法都是隱式指定為 final 關鍵字的。