1. 程式人生 > >[JAVA]覆寫中的關鍵字----super與final

[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關鍵字。