final關鍵字可用於修飾類、方法和變數,final修飾的類不能被繼承;final修飾的方法不可被重寫;final修飾的變數不可被改變。 1. final類 final修飾的類不能被繼承意思是final修飾的類不可以有子類,java.lang.Math類就是一個final類,它不可以有子類。 定義一 ...
final關鍵字可用於修飾類、方法和變數,final修飾的類不能被繼承;final修飾的方法不可被重寫;final修飾的變數不可被改變。
1. final類
final修飾的類不能被繼承意思是final修飾的類不可以有子類,java.lang.Math類就是一個final類,它不可以有子類。
定義一個final類的好處是:可以防止其它類改變該類的方法和實現細節,防止一些不安全因素的產生。
下麵定義了一個簡單的final類:
public final class FinalClass { }
//下麵的類繼承將會出現編譯錯誤
class Sub extends FinalClass { }
2. final方法
final修飾的方法不可被重寫,如果不希望子類重寫父類的某個方法,則可以使用final修飾詞方法。Object類里的getClass()方法就是final修飾的,該方法不可被重寫。
下麵的程式試圖重寫final方法,將會引發編譯錯誤:
public class FinalMethod {
public final void say () { }
}
class Sub extends FinalMethod {
//下麵方法將會出現編譯錯誤
public void say () { }
}
註:final修飾的方法只是不能被重寫,但可以被重載!
3. final成員變數
final修飾的變數不可被改變,意思是不能被重新賦值。由於final修飾的成員變數不能重新賦值,所以Java語規定:final修飾的成員變數必須由程式員顯示的指定初始值。
final修飾的類變數和實例變數指定初始值得地方如下:
1)類變數:必須在靜態初始化塊中指定初始值或聲明該類變數時指定初始值,而且只能二選一指定。
2)實例變數:必須在非靜態初始化塊、聲明該實例變數或構造器中指定初始值,而且只能三選一指定。
final修飾基本類型變數和引用類型變數的區別:
當final修飾基本類型變數時,改基本類型變數不能被改變。但對於引用類型變數而言,它保存的僅僅只是引用,final只保證這個引用類型變數所引用的地址不會改變,
即一直引用同一個對象,但這個對象完全可以發生改變。