
?前幾天學(xué)過方法重寫,也就是說,一個(gè)類繼承至父類,子類可以將父類的方法重寫。
但有的時(shí)候父類的方法要求固定,不能被更改。
該怎么辦?
這就得學(xué)到一個(gè)新的修飾符了。
一、final修飾符
final,翻譯成中文就是“不可更改的 ”。
顧名思義,它是一個(gè)修飾符,用于修改不可更改的內(nèi)容。
被final修飾的類:不能被繼承。
被final修飾的方法:不能被重寫。
被final修飾的變量:不能被重新賦值。
被final修飾的常量:名稱一般都有書寫規(guī)范,所有字母都大寫。多個(gè)單詞之間,使用下劃線進(jìn)行分割。
1.修飾類和方法
①final修飾類,類不能被繼承。
既然不能被繼承,那final類里的方法也無法被重寫。
②final修飾方法,方法不能被重寫。
非final類中,也可以存著final方法。
注:其中final方法是可以被重載的(同名不同參)
2.修飾局部變量
③用final修飾基本數(shù)據(jù)類型局部變量。
只能賦值一次,不能再更改了,編譯會(huì)報(bào)錯(cuò)。
基本數(shù)據(jù)類型不能更改的是值。
④用final修飾引用數(shù)據(jù)類型局部變量。
只能創(chuàng)建對(duì)象一次,不能再次創(chuàng)建對(duì)象,編譯會(huì)報(bào)錯(cuò)。
引用數(shù)據(jù)類型不能更改的是對(duì)象的地址。
該對(duì)象的值是可以通過對(duì)應(yīng)的setXXX()方法更改的。
3.修飾成員變量
成員變量和局部變量有一個(gè)區(qū)別在于:
成員變量是有默認(rèn)值的。
所以用final修飾成員變量,它就不再有默認(rèn)值了,必須一步直接賦值 。
初始化方式有兩種,只能二選一:
⑤直接初始化賦值。
⑥構(gòu)造方法賦值。
注意:用setXXX()方法無法賦值。
二、權(quán)限修飾符
public這個(gè)關(guān)鍵字太常見了,它就是一個(gè)權(quán)限修飾符。
在Java語言里面有四種權(quán)限修飾符。
其實(shí)看字面意思也蠻好理解的:
①public:公共的。
可以修飾類、成員變量、成員方法、構(gòu)造方法。
被public修飾的成員,可以在任何一個(gè)類中被調(diào)用,不管同包或不同包。
一般情況下,類的構(gòu)造方法、成員方法會(huì)使用public,方便創(chuàng)建對(duì)象和調(diào)用方法。
②protected:受保護(hù)的。
可以修飾成員變量,成員方法,構(gòu)造方法,不能修飾類(此處指外部類、內(nèi)部類不考慮)。
被protected修飾的成員,只能被同包下的其他類訪問。
如果不同包下的類要訪問被protected修飾的成員,這個(gè)類必須是其子類。
③default:默認(rèn)的。
可以修飾類,成員變量,成員方法,構(gòu)造方法。
若是沒有加權(quán)限修飾符,其訪問能力就是default權(quán)限。
被默認(rèn)權(quán)限修飾后,其只能被本類以及同包下的其他類訪問。不同包的子類都不行。
④private:私有的。
可以修飾成員變量,成員方法,構(gòu)造方法,不能修飾類(此處指的是外部類,內(nèi)部類不加以考慮)。
被private修飾的成員只能在其修飾的本類中訪問,在其他類中不能調(diào)用,但是被private修飾的成員可以通過set和get方法向外界提供訪問方式 。
private類型的方法都默認(rèn)為是final方法,因而也不能被子類重寫
權(quán)限是從大到小的:
public > protect >default>private
三、abstract和static修飾符
修飾符除了權(quán)限修飾符和final修飾符,常見的還有abstract和static修飾符。
這兩個(gè)關(guān)鍵字前面都學(xué)過,做一個(gè)回顧:
1.abstact修飾類
表明這是一個(gè)抽象類。
抽象類不能創(chuàng)建對(duì)象生成實(shí)例,需要使用子類實(shí)例化
2.abstact修飾方法
表明這是一個(gè)抽象方法,只有方法名,沒有方法體。
需要子類重寫。
3.static修飾方法
靜態(tài)方法只能訪問靜態(tài)變量。
靜態(tài)方法可以用類名直接調(diào)用。
4.static修飾變量
也可稱為類變量,局部變量不能被static修飾。
也可以用類名直接調(diào)用。
5.static修飾代碼塊
隨著類的加載而加載一次,相當(dāng)于初始化賦值。