使用final前,我們得對final有一定的了解才能進行使用。
final變數
final關鍵字在宣告了變數之後,就不可以再改變該變數的值,通常由final定義的變數為常量。final除了可以修飾基本資料型別的常量,還可修飾物件的引用,陣列可以看成乙個修飾物件的引用,所以final可以用來修飾陣列。一旦乙個物件引用被修飾成final之後,它就只能恆定指向乙個物件,無法將其改變指向另外乙個物件,乙個既是static又是final修飾的字段只佔據一段不能改變的儲存空間。
final方法
final方法不能被重寫。
將方法宣告為final,那就說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴充套件,並且也不允許任何從此類繼承的類來覆寫這個方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。另外有一種被稱為inline的機制,它會使你在呼叫final方法時,直接將方法主體插入到呼叫處,而不是進行例行的方法呼叫,例如儲存斷點,壓棧等,這樣可能會使你的程式效率有所提高,然而當你的方法主體非常龐大時,或你在多處呼叫此方法,那麼你的呼叫主體**便會迅速膨脹,可能反而會影響效率,所以你要慎用final進行方法定義。
注意:
父類 private final 方法1();
子類 private final 方法1();當然子類是extend是父類的
那麼在呼叫方法1時,父類會被覆蓋嗎?不會,final方法沒有被覆蓋,子類中沒有被重寫。子類中無法被正常覆蓋,而是生成了乙個新的方法。
final類
當你將final用於類身上時,你就需要仔細考慮,因為乙個final類是無法被任何人繼承的,並且不允許其他人對這個類進行改動。那也就意味著此類在乙個繼承樹中是乙個葉子類,並且此類的設計已被認為很完美而不需要進行修改或擴充套件。
對於final類中的成員變數,你可以定義其為final,也可以不是final。而對於方法,由於所屬類為final的關係,自然也就成了final型的。你也可以明確的給final類中的方法加上乙個final,但這顯然沒有意義。
java中的final如何使用和理解
1 final類 不能被繼承,因此 final類 的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會再被擴充套件,那麼就設計為 final類 final方法不能被子類的方法覆蓋,但可以被繼承。public class te...
java中的final如何使用和理解
1 final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會再被擴充套件,那麼就設計為final類。final方法不能被子類的方法覆蓋,但可以被繼承。public class test1 ...
java中的final如何使用和理解
1 final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會再被擴充套件,那麼就設計為final類。final方法不能被子類的方法覆蓋,但可以被繼承。public class test1 ...