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