final關鍵字、內部類、四種許可權修飾符

學無止步_窮其一生發表於2020-10-06

                                                   Final關鍵字

1、fianl修飾一個類:格式:public final class 類名稱{//},這個類不能有任何的子類。

2、final修飾一個方法:格式:public final 返回值型別 方法名稱(引數列表){//方法體},該方法不能被子類覆蓋重寫。對於類和方法來說abstract和final不能同時使用,因為矛盾。

3、final修飾一個區域性變數:格式:final 資料型別 變數名 = 數值。該變數不能進行改變,一次賦值終身不變。對於基本型別來說不可變就是變數中的資料不變,對於引用型別來說,不可變就是變數中的地址值不可變。

4、final下修飾一個成員變數:格式等同於區域性變數,但是由於成員變數具有預設值,所以用了final之後必須手動賦值,要麼直接賦值,要麼通過構造方法賦值(二者選其一)。

                                             四種修飾符的訪問許可權

 

Public

Protected

Default

Private

同一個類

yes

yes

yes

Yes

同包不同類

Yes

yes

yes

no

不同包子類

yes

yes

no

No

不同包非子類

yes

no

no

no

許可權修飾符修飾類時:

外部類:public/default

成員內部類:四種都行。

區域性內部類:不使用許可權修飾符。

                                                內部類

1、分類:成員內部類、區域性內部類(包含匿名內部類)。

2、成員內部類:

格式:修飾符 class 外部類{修飾符 class 內部類{}}。

內用外,隨意訪問;外用內需要內部類物件。

使用成員內部類的兩種方式:

a.間接方式:在外部類的方法中,使用內部類,然後main只是呼叫外部類的方法。

b.直接使用:外部類名稱.內部類名稱 物件名 = new 外部類名稱().new 內部類名稱();

        在內部類中如何訪問外部類的同名變數:外部類名稱.this.外部類成員變數。

3、區域性內部類:

        格式:修飾符 class 外部類名稱{修飾符 返回值型別 外部類方法名(引數列表){ class 內部類名稱{}}}

        區域性內部類只能在包含他的方法中才能使用,出了方法就不能用了。

        區域性內部類,如果希望訪問所在方法的區域性變數,那麼這個區域性變數必須是有效final的(即區域性變數需要保持不變或者新增final修飾符)。原因:new出來的物件在堆記憶體中,而區域性變數是跟著方法走的,在棧記憶體中,方法執行結束後立刻出棧區域性變數跟著消失,但是內部類物件會持續存在,直到垃圾回收。

4、匿名內部類:

        格式:父類(介面名稱)物件名 = new 父類(介面名稱)(){//實現重寫所有抽象方法。};

        適用場景:當介面的實現類或者父類的子類,只需要使用唯一的一次,那麼這種情況下就可以省略該類的定義,改為使用匿名內部類。

 

 

相關文章