創新互聯www.cdcxhl.cn八線動態BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
一、final
根據程序上下文環境,Java關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設計或效率。
注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的。
總的來說,final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
1)final修飾類
當用final修飾一個類時,表明這個類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。那也就意味著此類在繼承樹中是一個葉子類,并且此類的設計已被認為很完美而不需要進行修改或擴展。對于final類中的成員,可以定義其為final,也可以不是final。而對于方法,自然也就成了final型的。在使用final修飾類的時候,要注意謹慎選擇,除非這個類真的在以后不會用來繼承或者出于安全的考慮,盡量不要將類設計為final類。
2)final修飾方法
使用final方法的原因有兩個。第一就是說明已經知道這個方法提供的功能已經滿足要求,不需要進行擴展,并且也不允許任何從此類繼承而是的子類來覆寫這個方法,但是繼承類仍然可以直接使用這個方法。第二就是高效,編譯器在遇到調用final方法時候會將所有對此方法的調用轉化為inline調用的機制,大大提高執行效率。然而當方法主體非常龐大時,或在多處調用此方法時,調用代碼便會迅速膨脹,可能反而會影響效率,所以要慎用final進行方法定義。只有在想明確禁止該方法在子類中被覆蓋的情況下才將方法設置為final的。例如:
class Test1 { public void f1() { System.out.println("f1"); } //無法被子類覆蓋的方法 public final void f2() { System.out.println("f2"); } public void f3() { System.out.println("f3"); } private void f4() { System.out.println("f4"); } } public class Test2 extends Test1 { public void f1(){ System.out.println("Test1父類方法f1被覆蓋!"); } public static void main(String[] args) { Test2 t = new Test2(); t.f1(); t.f2(); //調用從父類繼承過來的final方法 t.f3(); //調用從父類繼承過來的方法 //t.f4(); //調用失敗,無法從父類繼承獲得 } }
網頁標題:淺析對Java關鍵字final和static的理解-創新互聯
當前鏈接:http://m.kartarina.com/article6/cdssog.html
成都網站建設公司_創新互聯,為您提供建站公司、網站設計、移動網站建設、網站內鏈、網站收錄、網站設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯