歡迎學習 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 關鍵字的。