Java中的final關(guān)鍵字和抽象類詳解
final關(guān)鍵字
可以修飾類、屬性、方法和局部變量【參數(shù)】。
使用場(chǎng)景
1、當(dāng)不希望 類被繼承時(shí),可以用final修飾。比如不希望子類重寫(xiě)父類時(shí)。
2、當(dāng)不希望子類重寫(xiě)父類的某個(gè)方法。注意:此時(shí)不能重寫(xiě)但能繼承父類此方法使用。
3、當(dāng)不希望類的某個(gè)屬性的值被修改,可以使用final修飾。一般這種屬性使用全大寫(xiě)命名。
4、當(dāng)不希望某個(gè)局部變量被修改時(shí),對(duì)參數(shù)進(jìn)行修飾。
使用細(xì)節(jié)
1、final 修飾的屬性一般稱之為常量,
2、final 修飾的屬性在定義時(shí),必須賦初始值,并且之后不能再修改。
- 在定義屬性的時(shí)候,進(jìn)行賦值。
- 在構(gòu)造器中
- 在代碼塊中
3、當(dāng) final 修飾的屬性是靜態(tài)的,則初始化的位置只能是:
- 定義時(shí)
- 在靜態(tài)代碼塊中,注意不能在構(gòu)造器中賦值了。
4、final 修飾的類不能繼承,但是可以進(jìn)行實(shí)例化。
5、如果類不是final類,但是含有final方法,則該方法雖然不能重寫(xiě),但仍能被繼承。
6、一般如果類已經(jīng)被final修飾了,則內(nèi)部的方法就沒(méi)必要使用final了
7、final 和 static 往往搭配對(duì)屬性進(jìn)行使用,效率更高,這樣不會(huì)導(dǎo)致類加載,底層編譯器對(duì)這種修飾進(jìn)行了優(yōu)化處理。
抽象類
當(dāng)父類的一些方法不能確定時(shí),可以用abstract關(guān)鍵字來(lái)修飾該方法,這個(gè)方法就是抽象方法,此時(shí)需將該類用 abstract 來(lái)修飾,即抽象類。
一般,抽象類會(huì)被繼承,在子類中實(shí)現(xiàn)父類中不能確定的方法。
抽象類的介紹
1、當(dāng)使用 abstract 關(guān)鍵字來(lái)修飾一個(gè)類時(shí),這個(gè)類就叫 抽象類
2、用 abstract 關(guān)鍵字來(lái)修飾一個(gè)方法時(shí),這個(gè)方法就是抽象方法。注意:抽象方法是沒(méi)有方法體的。
3、抽象類的價(jià)值更多的是設(shè)計(jì),是設(shè)計(jì)者設(shè)計(jì)好后,讓子類繼承并實(shí)現(xiàn)抽象方法。
4、抽象類,一般考官在問(wèn)的時(shí)候,主要在框架和設(shè)計(jì)模式使用比較多。
抽象類的使用細(xì)節(jié)
1、抽象類是不能被實(shí)例化的, 但可以使用匿名內(nèi)部類聲明。
2、抽象類不一定要包含抽象方法。
3、一旦包含了抽象方法,則這個(gè)類必須聲明為抽象類。
4、abstract 只能修飾類和方法,不能修飾屬性和其他的。
5、如果一個(gè)類繼承了抽象類,則它必須實(shí)現(xiàn)抽象類的所有抽象方法,除非它自己也聲明為abstract類。
6、抽象方法不能使用private、final、和static來(lái)修飾,因?yàn)檫@些關(guān)鍵字的修飾,會(huì)影響子類的重寫(xiě)。
模版設(shè)計(jì)模式
需求:
1、有多個(gè)類,完成不同的任務(wù)job
2、要求能夠得到各自完成任務(wù)的時(shí)間
到此這篇關(guān)于Java中的final關(guān)鍵字和抽象類詳解的文章就介紹到這了,更多相關(guān)Java的final和抽象類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單談?wù)凧ava類與類之間的關(guān)系
類與類之間的關(guān)系對(duì)于理解面向?qū)ο缶哂泻苤匾淖饔?,以前在面試的時(shí)候也經(jīng)常被問(wèn)到這個(gè)問(wèn)題,在這里我就簡(jiǎn)單給大家介紹一下。2016-05-05深入淺出理解Java Lambda表達(dá)式之四大核心函數(shù)式的用法與范例
Lambda 表達(dá)式,也可稱為閉包,它是推動(dòng) Java 8 發(fā)布的最重要新特性。Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡(jiǎn)潔緊湊,今天小編帶你理解Lambda表達(dá)式之四大核心函數(shù)式的用法,感興趣的朋友快來(lái)看看吧2021-11-11SpringBoot獲取不到用戶真實(shí)IP的解決方法
最近遇到個(gè)問(wèn)題,項(xiàng)目部署后發(fā)現(xiàn)服務(wù)端無(wú)法獲取到客戶端真實(shí)的IP地址,本文就來(lái)介紹一下這個(gè)問(wèn)題的解決方法,感興趣的可以了解一下2023-08-08Mybatis foreach用法解析--對(duì)于list和array
這篇文章主要介紹了Mybatis foreach用法解析--對(duì)于list和array,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java?如何用二維數(shù)組創(chuàng)建空心菱形
這篇文章主要介紹了Java?如何用二維數(shù)組創(chuàng)建空心菱形,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03詳解Spring Security如何在權(quán)限中使用通配符
小伙伴們知道,在Shiro中,默認(rèn)是支持權(quán)限通配符的。現(xiàn)在給用戶授權(quán)的時(shí)候,可以一個(gè)權(quán)限一個(gè)權(quán)限的配置,也可以直接用通配符。本文將介紹Spring Security如何在權(quán)限中使用通配符,需要的可以參考一下2022-06-06IDEA無(wú)法使用終端terminal問(wèn)題的解決方案
這篇文章主要介紹了IDEA無(wú)法使用終端terminal問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09