final 許可權 內部類

2021-08-21 21:27:01 字數 4002 閱讀 3541

代表最終不可變的。
用法:

1、用來修飾乙個類:不能有子類,所以其中所有的方法都不嗯呢該被覆蓋重寫。

2、用來修飾乙個方法:方法不能被覆蓋重寫。

3、用來修飾乙個區域性變數(variable):一次賦值,終生不變。

4、用來修飾乙個成員變數:一次賦值,終生不變。沒有預設值需要手動賦值。

final修飾的類又叫「太監類」。

final關鍵字abstract關鍵字衝突,不能同時是使用。

格式:

public final class 類名
final用來修飾乙個區域性變數,那這個區域性變數,一次賦值終生不變。

final

int numb = 15;

system.out。println(numb);// 15

注意:

final修飾引用型別的資料,位址值不可變,但是通過位址修改內部的內容是可以的。

final修飾基本型別,一次賦值,終生不變。

final用來修飾乙個成員變數,也是一次賦值,終生不變。

成員變數本來是預設值的。一旦final修飾了成員變數,那麼將不再具有預設值。

成員變數賦值:

1、直接定義的時候賦值。

2、通過構造方法賦值。

final

int numb = 15;

system.out.println(numb); // 15

// numb = 20; // 錯誤寫法!

// numb = 15; // 錯誤寫法!

final

int numc;

numc = 25; // 分成兩步,是正確寫法!

system.out.println(numc); // 25

system.out.println("**********====");

final

int array = ; // 位址值不可變

system.out.println(arrays.tostring(array)); // [10, 20, 30]

array[1] = 25;

system.out.println(arrays.tostring(array)); // [10, 25, 30]

public > protected > (default) > private

同乙個類(自己) yes

yesyes

yes同乙個包(鄰居) yes

yesyes

no不同包子類(兒子) yes

yesno

no不同包非子類(陌生人) yes

nono

no

注意事項:

1. (default)並不是關鍵字default,而是什麼都不寫。

2、只要不是相同的包都需要導包。

概念:在一類的裡面再定義乙個類,裡面的類就叫做內部類。

內部類的分類:

1、成員內部類

2、區域性內部類(包含匿名內部類)

成員內部類的定義格式:

修飾符 class 類名稱

}

使用 :

1、間接使用:在外部類的成員方法中,建立乙個內部類的物件。直觀呼叫外部類物件的外部成員方法即可。

2、直接使用:直接使用內部類物件,公示:

// 外部類.內部類 物件名 = new 外部類().new 內部類();

outer.inner obj = new outer().new inner();

obj.methodinner();

備註 :

1、外部類和內部類仍然可以繼續定義成員變數、成員方法、而且用本類當中的東西,仍然是隨便用。

2、內部類如果訪問外部類的內容,可以隨意。

3、外部類訪問內部類的內容,必須有乙個內部類的物件才行。

4、編譯生成的.class檔名稱為「外部類$內部類.class

內部類訪問外部類的成員變數:

外部類名.this.成員變數名;
成員內部類:定義在外部類內,在方法外

區域性內部類:外部類的成員方法內,只有本方法內才有用。(一定要定義區域性內部類,然後才能使用。)

成員內部類的許可權修飾符:

1、外部類:public、(default

2、成員內部類:publicprotected、(default)、privete

3、區域性內部類:什麼都不能寫,而且這並不是(default)方法。

區域性內部類訪問所在的方法的區域性變數,那麼這個變數一定需要是有效的final才行。

因為區域性變數和內部累建立的物件生命週期不同。

匿名內部類

介面名稱 物件名 = new 介面名稱();
解析:

new:建立物件

右側的介面名稱:匿名內部類所實現的介面名。

右側的:匿名內部類。

public

class demomain

};obj2.method();

// 既是匿名物件,也是匿名內部類

new myinte***ce()

}.method();

}}

匿名物件類的好處:省去了單獨定義乙個實現類的麻煩。

anonymous匿名內部類

1、匿名內部類的使用前提:必須有繼承或者介面實現關係。

2、匿名內部類可以使用介面,也可以使用抽象類,也可以使用普通的類。只要不是final的,就可以。

3、匿名內部類(區域性內部類)編譯之後因為沒有名字,所以產生的位元組碼檔案是「外部類名稱$1.class」。

介面作為成員變數的型別。

介面作為方法的返回值。

public

class body

public

class heart

public

void

beat()

}}

測試類:

// 通過body間接使用heart

body

body = new

body(); // 建立了外部類物件

body.methodouter();

// 直接使用heart內部類物件

body.heart heart = new

body().new heart();

heart.beat();

heart.methodinner(); // 10

final 許可權 內部類 引用型別

final 不可改變。可以用於修飾類 方法和變數。final運用方面 1 修飾變數 基本型別的區域性變數,被final修飾後,只能賦值一次,不能再更改。2 區域性變數 引用型別 引用型別的區域性變數,被final修飾後,只能指向乙個物件,位址不能再更改。但是不影響物件內部的成員變數值的修改。3 成員...

11 final 許可權 內部類

final類不能有子類,但可以有父類 final類不能有abstract方法 修飾方法時,final和abstract不能同時出現 fina修飾變數時 內部類分為 成員內部類 區域性內部類。包含內部類的類在被編譯時會生成兩個位元組碼檔案 外部類名 內部類名.calss 和 外部類名.calss 內部...

Day16 final 許可權 內部類

許可權修飾符 編寫 時,如果沒有特殊的考慮,建議這樣使用許可權 內部類 內用外,隨意訪問 外用內,需要內部類物件。成員內部類 定義在類中方法外的類。區域性內部類 定義在類中的方法內。匿名內部類 實現類或子類只需使用一次,就可以使用 匿名內部類 內部類public class innerclass c...