[JAVA]覆寫中的關鍵字----super與final
bi1.覆寫
1.1定義:子類定義了和父類方法名稱,引數型別及個數完全相同的方法,但被覆寫不能夠擁有比父類更嚴格的訪問控制權限。
訪問控制權限:public>default>private.。如果父類使用public,那麼子類只能使用public。如果父類使用default,那麼子類可以使用default和public。注:不寫訪問控制權預設default。但是如果父類使用private,子類使用public呢?
通過結果發現:如果父類使用private來封裝方法,一旦封裝了,那麼這個方法就只有父類自己知道。此時子類定義了一個與該方法同名的方法,那麼子類這個方法就是子類自己重新生成的,和父類沒有任何關係。
1.2面試題:過載(overload)和覆寫(override)的區別
1.3屬性的覆寫。
子類定義了與父類同名的屬性,就稱為屬性的覆寫。但一般在類中要求使用private來封裝屬性,一旦封裝了,子類不知道父類有這個屬性,也就不存在覆寫的問題了,所以屬性的覆寫一般是沒有任何意義的。
2.super關鍵字
2.1super的用法:
2.1.1用於構造方法**,表示呼叫父類構造方法。super(引數列表)
a.當子類呼叫父類無參構造時super可寫可不寫,表示呼叫父類無參構造。實際上在子類的構造方法中隱含了一個語句Super();如果父類沒有提供無參,就必須使用super()明確指明你要呼叫的父類構造方法。
b.當呼叫父類有參構造時, super(引數列表),必須要寫,告訴編譯器呼叫的是哪個有參構造。
注意:
a.子類構造方法中呼叫父類構造必須是第一行語句。
b.this和super不能同時呼叫。
2.1.2 用於普通方法 super.方法名(引數)
用於在子類中明確呼叫父類被覆寫的方法。
2.1.3 super用於屬性
super.屬性名 表示呼叫父類中被覆寫的屬性(許可權不能是private)
但是super用於屬性的時候,屬性的許可權不可以是private,但我們99%的時候會使用private來宣告屬性,所有super用於屬性一般不常用,僅限於瞭解。
2.1.4.this和super區別
先從以下程式碼開始看起:
通過以上程式碼發現super和this在使用上非常方便,但是倆者最大的區別是super是子類訪問父類的操作,而this是本類的訪問處理操作。
no |
區別 |
this |
super |
1 |
概念 |
訪問本類中的屬性和方法 |
由子類訪問父類中的屬性和方法 |
2 |
查詢範圍 |
先查詢本類,如果本類沒有就呼叫父類 |
不查詢本類而是直接呼叫父類定義 |
3 |
特殊 |
表示當前物件 |
無 |
3.final關鍵字----終結器
3.1final修飾類。(所以String類以及8大基本型別的封裝。Integer)
當一個類被final修飾,表示這個類不能擁有子類這個類不允許被繼承),一旦一個類被final修飾,該類的所有方法會預設加上final(成員變數不加final)。
3.2final修飾方法。
當一個方法被final修飾,表示該方法不允許被覆寫。
當一個方法被private修飾後相當於加了一個final關鍵字。