java——類——final

final

final意思是不可修改,類似於c++中const,但final應用範圍比const廣,final可修飾範圍包括:
  • 數據對象
  • 方法成員

修飾數據對象

final修飾數據對象意義同const,final可修飾數據對象包括:
  • static數據成員對象
  • non-static數據成員對象
  • 方法參數對象
  • 方法局部對象

blank final

一般來說,final修飾數據對象都顯式初始化,這樣final數據對象就含自定義初始值,沒有顯式初始化的final數據對象稱爲blank final數據對象:
  • non-blank final數據對象:顯式初始化
  • blank final數據對象:無顯式初始化
blank final除了繼承non-blank final的不可修改含義,在初始化上做了一些限制,沒有顯式初始化的blank final數據對象毫無意義
  • blank final static數據成員對象:final static數據成員對象必須在定義處顯式初始化,否則編譯error,因此不存在blank final static數據成員對象
  • blank final non-static數據成員對象:必須在所有構造函數初始化(如果類含多個構造函數),確保實例對象構造完畢後,blank final non-static數據成員對象完成顯式初始化(blank final non-static數據成員對象只能初始化一次,第一次”=“爲初始化,之後”=“爲賦值運算符,違背final不可修改含義)
  • blank final 方法參數對象:方法參數對象值在方法調用時通過實參(默認實參)傳遞,因此必然含自定義初始值,因此不存在blank final方法參數對象
  • blank final 方法局部對象:要求在方法作用域內如果被引用就必須含自定義初始值,因此blank final方法局部對象在引用之前必須初始化,規則同non-static數據成員對象(只能初始化一次,第一次”=“爲初始化,之後”=“爲賦值運算符,違背final不可修改含義),如果blank final方法局部對象不會被引用,可不初始化(blank final方法局部對象不會被引用,則該對象本身是冗餘的,應刪除)

修飾方法

final可修飾方法:
  • static方法
  • non-static方法
final修飾方法表示對應方法不能被子類override,阻止final方法多態行爲,因爲子類無法override final方法,因此final方法編譯期bind(通過對應類引用調用final方法)
注:static方法本身編譯期bind,因此final修飾static方法意義不大,但final static方法仍可阻止子類override
final修飾方法規則:
  • private方法本身就不可能被子類覆寫,因此final修飾private方法無意義,儘管語法上可這麼做
  • final不能修飾abstract method,因爲abstract method天然要求子類override abstract method
  • final不能修飾interface method,因此interface method天然要求子類override interface method

修飾類

final修飾類表示該類不能被繼承,阻止子類改變final類行爲,final類本質就是類所有方法爲final方法(構造函數除外)
final修飾類規則:
  • final不能修飾abstract class,因爲abstract class包含abstract method,abstract method天然要求子類override abstract method
  • final不能修飾interface,因爲interface包含interface method,interface method天然要求子類override interface method
發佈了244 篇原創文章 · 獲贊 5 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章