final
1)用final修飾的類不能被繼承,沒有子類;用final修飾的方法不能被子類的方法覆蓋;用final修飾的變數表示常量,只能被賦一次值。
final不能用來修飾構造方法,父類中用private修飾的方法不能被子類的方法覆蓋。final方法是不允許子類方法中寫乙個同樣簽名的方法的,但private的情況下,你可以定義乙個同樣簽名的方法。(final方法不能過載,private方法可以過載)
classfinalextends }
classfinaltestextendsfinalextends
publicstaticvoidmain(string args) }
結果為:
hello b
2)final類
final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,預設都是final 的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會載被擴充套件,那麼就設計為final類。
3) final方法
如果乙個類不允許其子類覆蓋某個方法,則可以把這個方法宣告為final方法。 使用final方法的原因有二:
第一、把方法鎖定,防止任何繼承類修改它的意義和實現。
第二、高效。編譯器在遇到呼叫final方法時候會轉入內嵌機制,大大提高執行效率。
classtest2
// 無法被子類覆蓋的方法
publicfinalvoidf2()
publicvoidf3()
privatevoidf4() }
publicclasstest1extendstest2
publicstaticvoidmain(string args) }
結果為:
test2
父類方法
f1被覆蓋!
f2 f3
4)final變數(常量)
用final修飾的成員變數表示常量,值一旦給定就無法改變!
final
修飾的變數有三種:靜態變數、例項變數和區域性變數,分別表示三種型別的常量。
從下面的例子中可以看出,一旦給final變數初值後,值就不能再改變了。
另外,final變數定義的時候,可以先宣告,而不給初值,這中變數也稱為final空白,無論什麼情況,編譯器都確保空白final在使用之前必須被初始化。但是,final空白在final關鍵字final的使用上提供了更大的靈活性,為此,乙個類中的final資料成員就可以實現依物件而有所不同,卻有保持其恆定不變的特徵。
對於final型別的例項變數,可以在定義變數時,或者在構造方法中進行初始化;對於final型別的靜態變數,可以在定義變數時進行初始化,或者在靜態**塊中初始化。
publicclasssample
voidmethodprintln()
publicstaticvoidmain(string args) }
結果為:
例項化物件輸入 10
15靜態成員變數,不用例項化也可以輸出: 10
15呼叫方法輸出: 10
15如果將引用型別的變數用final修飾,那麼該變數只能始終引用乙個物件,但可以改變物件的內容。
publicclassfinalsample
publicstaticvoidmain(string args) }
5)final引數
當函式引數為final型別時,你可以讀取使用該引數,但是無法改變該引數的值。
classtest4
publicvoidf1(finalinti) }
JAVA中final關鍵字的用法
final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會再被擴充套件,那麼就設計為final類。final方法不能被子類的方法覆蓋,但可以被繼承。2 final方法 如果乙個類不允許其子類...
java中final關鍵字
final關鍵字 final 最終 修飾符 final 關鍵字的用法 1.final 關鍵字修飾乙個基本型別的變數時,該變數不能重新賦值,第一次的值為最終的。2.fianl 關鍵字修飾乙個引用型別變數時,該變數不能重新指向新的物件。3.final 關鍵字修飾乙個函式的時候,該函式不能被重寫。4.fi...
Java中final關鍵字
常見四種用法 1.可以用來修飾類 2.可以用來修飾方法 3.可以用來修飾區域性變數 4.可以用來修飾成員變數 一.final關鍵字修飾類 格式 public final class 類名稱 規範 該類不能有任何子類 總結 乙個類如果被final修飾,那麼其所有的成員方法都無法進行覆寫。二.final...