課程
/后端開發(fā)
/Java
/Java入門第二季
final類可以繼承其他類嗎
2016-10-08
源自:Java入門第二季 9-3
正在回答
可以繼承的,只是其他類無法繼承final類
之所以要使用final方法,可能是出于對(duì)兩方面理由的考慮。第一個(gè)是為方法“上鎖”,防止任何繼承類改變它的本來含義。設(shè)計(jì)程序時(shí),若希望一個(gè)方法的行為在繼承期間保持不變,而且不可被覆蓋或改寫,就可以采取這種做法。采用final方法的第二個(gè)理由是程序執(zhí)行的效率。將一個(gè)方法設(shè)成final后,編譯器就可以把對(duì)那個(gè)方法的所有調(diào)用都置入“嵌入”調(diào)用里。只要編譯器發(fā)現(xiàn)一個(gè)final方法調(diào)用,就會(huì)(根據(jù)它自己的判斷)忽略為執(zhí)行方法調(diào)用機(jī)制而采取的常規(guī)代碼插入方法(將自變量壓入堆棧;跳至方法代碼并執(zhí)行它;跳回來;清除堆棧自變量;最后對(duì)返回值進(jìn)行處理)。相反,它會(huì)用方法主體內(nèi)實(shí)際代碼的一個(gè)副本來替換方法調(diào)用。這樣做可避免方法調(diào)用時(shí)的系統(tǒng)開銷。當(dāng)然,若方法體積太大,那么程序也會(huì)變得雍腫,可能受到到不到嵌入代碼所帶來的任何性能提升。因?yàn)槿魏翁嵘急换ㄔ诜椒▋?nèi)部的時(shí)間抵消了。Java編譯器能自動(dòng)偵測(cè)這些情況,并頗為“明智”地決定是否嵌入一個(gè)final方法。然而,最好還是不要完全相信編譯器能正確地作出所有判斷。通常,只有在方法的代碼量非常少,或者想明確禁止方法被覆蓋的時(shí)候,才應(yīng)考慮將一個(gè)方法設(shè)為final。類內(nèi)所有private方法都自動(dòng)成為final。由于我們不能訪問一個(gè)private方法,所以它絕對(duì)不會(huì)被其他方法覆蓋(若強(qiáng)行這樣做,編譯器會(huì)給出錯(cuò)誤提示)??蔀橐粋€(gè)private方法添加final指示符,但卻不能為那個(gè)方法提供任何額外的含義。
final 用于聲明屬性、方法和類,分別表示屬性不可變,方法不可重寫,類不可繼承
不是可以,是一定從別的類繼承過來的。
qq_去哪呢_0 提問者
舉報(bào)
課程升級(jí)!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會(huì)Java面向?qū)ο缶幊痰膴W妙
2 回答接口可以繼承父類嗎?
3 回答子類可以繼承父類的private屬性嗎
1 回答父類私有屬性子類可以繼承嗎?
6 回答抽象類不是不可以被繼承嗎?
7 回答類的繼承不是單繼承嗎?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-10-08
可以繼承的,只是其他類無法繼承final類
2016-10-08
之所以要使用final方法,可能是出于對(duì)兩方面理由的考慮。第一個(gè)是為方法“上鎖”,防止任何繼承類改變它的本來含義。設(shè)計(jì)程序時(shí),若希望一個(gè)方法的行為在繼承期間保持不變,而且不可被覆蓋或改寫,就可以采取這種做法。
采用final方法的第二個(gè)理由是程序執(zhí)行的效率。將一個(gè)方法設(shè)成final后,編譯器就可以把對(duì)那個(gè)方法的所有調(diào)用都置入“嵌入”調(diào)用里。只要編譯器發(fā)現(xiàn)一個(gè)final方法調(diào)用,就會(huì)(根據(jù)它自己的判斷)忽略為執(zhí)行方法調(diào)用機(jī)制而采取的常規(guī)代碼插入方法(將自變量壓入堆棧;跳至方法代碼并執(zhí)行它;跳回來;清除堆棧自變量;最后對(duì)返回值進(jìn)行處理)。相反,它會(huì)用方法主體內(nèi)實(shí)際代碼的一個(gè)副本來替換方法調(diào)用。這樣做可避免方法調(diào)用時(shí)的系統(tǒng)開銷。當(dāng)然,若方法體積太大,那么程序也會(huì)變得雍腫,可能受到到不到嵌入代碼所帶來的任何性能提升。因?yàn)槿魏翁嵘急换ㄔ诜椒▋?nèi)部的時(shí)間抵消了。Java編譯器能自動(dòng)偵測(cè)這些情況,并頗為“明智”地決定是否嵌入一個(gè)final方法。然而,最好還是不要完全相信編譯器能正確地作出所有判斷。通常,只有在方法的代碼量非常少,或者想明確禁止方法被覆蓋的時(shí)候,才應(yīng)考慮將一個(gè)方法設(shè)為final。
類內(nèi)所有private方法都自動(dòng)成為final。由于我們不能訪問一個(gè)private方法,所以它絕對(duì)不會(huì)被其他方法覆蓋(若強(qiáng)行這樣做,編譯器會(huì)給出錯(cuò)誤提示)??蔀橐粋€(gè)private方法添加final指示符,但卻不能為那個(gè)方法提供任何額外的含義。
2016-10-08
final 用于聲明屬性、方法和類,分別表示屬性不可變,方法不可重寫,類不可繼承
2016-10-08
不是可以,是一定從別的類繼承過來的。