final有“終態(tài)”和“不可變”的意思,它可以修飾非抽象類、非抽象方法、變量和方法參數(shù)。
一、final類
用final修飾的類沒有子類,所以不能夠被繼承。
在設(shè)計(jì)類的時(shí)候,如果這個(gè)類不需要有子類,類的實(shí)現(xiàn)細(xì)節(jié)不允許被改變,并且確信這個(gè)類不會(huì)被擴(kuò)展,那么就設(shè)計(jì)為final類。
二、final方法
final方法不能被子類覆蓋,但可以被繼承。
- public和protected修飾的final方法
由于用public和protected修飾的final方法對(duì)于子類而言具有可見性,所以子類不能覆蓋它們。 - private修飾的final方法
由于private修飾的方法對(duì)于子類而言不具有可見性,所以子類再實(shí)現(xiàn)一個(gè)簽名一樣的方法,只能稱之為拓展,而不是覆蓋。 - default的final方法
沒有用訪問修飾符修飾的final方法,在本包子類中,不能覆蓋,因?yàn)榭梢姡欢谄渌淖宇愔校捎诓豢梢姡梢酝卣挂粋€(gè)簽名一樣的方法。
三、final變量
用final修飾的變量相當(dāng)于常量,只能賦值一次,以后不能再修改。final變量可以在聲明的時(shí)候直接初始化,也可以先聲明,而不賦初值,這種變量也稱為final空白。
- final靜態(tài)變量
這種final空白要在static代碼塊里進(jìn)行初始化。 - final成員變量
要在構(gòu)造函數(shù)里初始化。 - final局部變量
在成員方法中,只能賦值一次。
四、final參數(shù)
方法的參數(shù)其實(shí)也是一種局部變量,它的作用域就是當(dāng)前方法,當(dāng)參數(shù)被final修飾時(shí),我們可以讀取該參數(shù),但是無法改變參數(shù)值。
五、final和static
final static方法沒有意義,因?yàn)閟tatic方法本來就不會(huì)被子類覆蓋。
final static變量相當(dāng)于“全局常量”。
六、final和abstract
不能連用,final不允許子類覆蓋,而abstract則要求子類重寫它,互相矛盾。
轉(zhuǎn)載請(qǐng)注明如下內(nèi)容:
文章來自簡(jiǎn)書,作者:就是楊宗
原文鏈接:http://www.lxweimin.com/p/2f1763e72ecf