再看 final 關鍵字


如果在指定變數值之後,就不想再改變變數值,可以在宣告變數時加上final限定,如果後續撰寫程式時,自己或別人不經意想修改final變數,就會出現編譯錯誤。

如果物件資料成員被宣告為final,但沒有明確使用=指定值,那表示延遲物件成員值的指定,在建構式執行流程中,一定要有對該資料成員指定值的動作,否則編譯錯誤。

class前也可以加上final關鍵字,如果class前使用了final關鍵字定義,那麼表示這個類別是最後一個了,不會再有子類別,也就是不能被繼承。有沒有實際的例子呢?有的!String在定義時就限定為final了,這可以在API文件上得證:

String是final類別


如果你打算繼承final類別,則會發生編譯錯誤:

不能繼承final類別


定義方法時,也可以限定該方法為final,這表示最後一次定義方法了,也就是子類別不可以重新定義final方法。有沒有實際的例子呢?有的!java.lang.Object上有幾個final方法。例如:

Object類別上的final方法之一


如果你嘗試在繼承父類別後,重新定義final方法,則會發生編譯錯誤:

不能重新定義final方法


在Java SE API中會宣告為final的類別或方法,通常與JVM物件或作業系統資源管理有密切相關,因此不希望API使用者繼承或重新定義。