天天看點

final類和方法

final類可以用于阻止繼承,防止人們利用這個類的子類。标準形式如下:

public final class Teacher extends Person{

}
           

類中特定方法也可以被聲明為final,子類就不能覆寫這個方法(final中的所有方法自動地成為final方法)。

public final class Teacher extends Person{
        public final String getName(){
        
        }
}
           

 将一個類聲明為final,隻有其中的方法自動的成為final,而不包括域。

方法或類聲明為final主要目的是:確定它們不會在子類中改變語義。例如,Calendar 類中的getTime和setTime方法都聲明為final。這表明Calendar類的設計者負責實作Date類與月曆态之間的轉換,而不允許子類處理這些問題。同樣地,String類也是final類,這意意味着不允許任何人定義String的子類。換言之,如果有二個string的引用,它引用的一定是個String對象,而不可能是其他類的對象。

final

final域使得確定初始化安全性(initialization safety)成為可能,初始化安全性讓不可變形對象不需要同步就能自由地被通路和共享

作用在類上               則為final類,final類不能被繼承。一般用于工具類時,同時把工具類構造函數聲明為私有,暴露靜态共有方法

作用在成員變量上    則視為常量。此時指派方式有三種:(1)聲明時指派(2)構造函數中指派(3)代碼塊中指派。 即不管哪種方式都要保證在使用該變量之前要確定已經有值。使用該特性,可以強制指派。final變量因為不可變,是以可以安全的存在于多線程中。

作用在方法上           作用在方法上可以保證該方法不能被重寫

作用在參數上           保證在方法體内部參數值不會被再次指派,一般好的程式設計習慣應該把參數值視為final,不管有沒有顯示使用final(重構)