學習Java基礎文本視頻文檔資料3月最新彙總(四)

3、final變量(常量)

學習Java基礎文本視頻文檔資料3月最新彙總(四)


 用final修飾的成員變量表示常量,值一旦給定就無法改變!

 final修飾的變量有三種:靜態變量、實例變量和局部變量,分別表示三種類型的常量。

 從下面的例子中可以看出,一旦給final變量初值後,值就不能再改變了。

 另外,final變量定義的時候,可以先聲明,而不給初值,這中變量也稱為final空白,無論什麼情況,編譯器都確保空白final在使用之前必須被初始化。但是,final空白在final關鍵字final的使用上提供了更大的靈活性,為此,一個類中的final數據成員就可以實現依對象而有所不同,卻有保持其恆定不變的特徵。

4、final參數

當函數參數為final類型時,你可以讀取使用該參數,但是無法改變該參數的值。

生成Java幫助文檔:命令格式:javadoc –d 文件夾名 –auther –version *.java

/** //格式

*類描述

*@author 作者名

*@version 版本號

*/

/**

*方法描述

*@param 參數描述

*@return 返回值描述

*/

繼 承(面向對象特徵之一)

java中對於繼承,java只支持單繼承。java雖然不直接支持多繼承,但是可實現多接口。

1:成員變量。

當子父類中出現一樣的屬性時,子類類型的對象,調用該屬性,值是子類的屬性值。

如果想要調用父類中的屬性值,需要使用一個關鍵字:super

This:代表是本類類型的對象引用。

Super:代表是子類所屬的父類中的內存空間引用。

注意:子父類中通常是不會出現同名成員變量的,因為父類中只要定義了,子類就不用在定義了,直接繼承過來用就可以了。

2:成員函數。

當子父類中出現了一模一樣的方法時,建立子類對象會運行子類中的方法。好像父類中的方法被覆蓋掉一樣。所以這種情況,是函數的另一個特性:重寫

3:構造函數。

發現子類構造函數運行時,先運行了父類的構造函數。為什麼呢?

原因:子類的所有構造函數中的第一行,其實都有一條隱身的語句super();

super(): 表示父類的構造函數,並會調用於參數相對應的父類中的構造函數。而super():是在調用父類中空參數的構造函數。

為什麼子類對象初始化時,都需要調用父類中的函數?(為什麼要在子類構造函數的第一行加入這個super()?)

因為子類繼承父類,會繼承到父類中的數據,所以必須要看父類是如何對自己的數據進行初始化的。所以子類在進行對象初始化時,先調用父類的構造函數,這就是子類的實例化過程

注意:子類中所有的構造函數都會默認訪問父類中的空參數的構造函數,因為每一個子類構造內第一行都有默認的語句super();

如果父類中沒有空參數的構造函數,那麼子類的構造函數內,必須通過super語句指定要訪問的父類中的構造函數。

如果子類構造函數中用this來指定調用子類自己的構造函數,那麼被調用的構造函數也一樣會訪問父類中的構造函數。

問題:

super()和this()是否可以同時出現的構造函數中?

兩個語句只能有一個定義在第一行,所以只能出現其中一個。

super()或者this():為什麼一定要定義在第一行?

因為super()或者this()都是調用構造函數,構造函數用於初始化,所以初始化的動作要先完成。

在方法覆蓋時,注意兩點:

1:子類覆蓋父類時,必須要保證,子類方法的權限必須大於等於父類方法權限可以實現繼承。否則,編譯失敗。(舉個例子,在父類中是public的方法,如果子類中將其降低訪問權限為private,那麼子類中重寫以後的方法對於外部對象就不可訪問了,這個就破壞了繼承的含義)

2:覆蓋時,要麼都靜態,要麼都不靜態。(靜態只能覆蓋靜態,或者被靜態覆蓋)

繼承的一個弊端:打破了封裝性。對於一些類,或者類中功能,是需要被繼承,或者複寫的。

這時如何解決問題呢?介紹一個關鍵字,final

final特點:(詳細解釋見前面)

1:這個關鍵字是一個修飾符,可以修飾類,方法,變量。

2:被final修飾的類是一個最終類,不可以被繼承。

3:被final修飾的方法是一個最終方法,不可以被覆蓋。

4:被final修飾的變量是一個常量,只能賦值一次。

抽象類: abstract

抽象類的特點:

1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以描述類和方法,不可以描述變量)。

2:抽象方法只定義方法聲明,並不定義方法實現。

3:抽象類不可以被創建對象(實例化)。

4:只有通過子類繼承抽象類並覆蓋了抽象類中的所有抽象方法後,該子類才可以實例化。否則,該子類還是一個抽象類。

抽象類的細節:

1:抽象類中是否有構造函數?有,用於給子類對象進行初始化。

2:抽象類中是否可以定義非抽象方法?

可以。其實,抽象類和一般類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個抽象函數。而且比一般類少了一個創建對象的部分。

3:抽象關鍵字abstract和哪些不可以共存?final , private , static

4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創建對象。

接 口:★★★★★

1:是用關鍵字interface定義的。

2:接口中包含的成員,最常見的有全局常量、抽象方法。

注意:接口中的成員都有固定的修飾符。

成員變量:public static final

成員方法:public abstract

interface Inter{

public static final int x = 3;

public abstract void show();

}

3:接口中有抽象方法,說明接口不可以實例化接口的子類必須實現了接口中所有的抽象方法後,該子類才可以實例化。否則,該子類還是一個抽象類。

4:類與類之間存在著繼承關係,類與接口中間存在的是實現關係。

繼承用extends ;實現用implements ;

5:接口和類不一樣的地方,就是,接口可以被多實現,這就是多繼承改良後的結果。java將多繼承機制通過多現實來體現。

6:一個類在繼承另一個類的同時,還可以實現多個接口。所以接口的出現避免了單繼承的侷限性。還可以將類進行功能的擴展。

7:其實java中是有多繼承的。接口與接口之間存在著繼承關係,接口可以多繼承接口

java類是單繼承的。classB Extends classA

java接口可以多繼承。Interface3 Extends Interface0, Interface1, interface……

不允許類多重繼承的主要原因是,如果A同時繼承B和C,而b和c同時有一個D方法,A如何決定該繼承那一個呢?

但接口不存在這樣的問題,接口全都是抽象方法繼承誰都無所謂,所以接口可以繼承多個接口。

抽象類與接口:

抽象類:一般用於描述一個體系單元,將一組共性內容進行抽取,特點:可以在類中定義抽象內容讓子類實現,可以定義非抽象內容讓子類直接使用。它裡面定義的都是一些體系中的基本內容

接口:一般用於定義對象的擴展功能,是在繼承之外還需這個對象具備的一些功能。

抽象類和接口的共性:都是不斷向上抽取的結果。

抽象類和接口的區別:

1:抽象類只能被繼承,而且只能單繼承。

接口需要被實現,而且可以多實現。

2:抽象類中可以定義非抽象方法,子類可以直接繼承使用。

接口中都是抽象方法,需要子類去實現。

3:抽象類使用的是 is a 關係。

接口使用的 like a 關係。

4:抽象類的成員修飾符可以自定義。

接口中的成員修飾符是固定的。全都是public的。

多 態★★★★★

學習Java基礎文本視頻文檔資料3月最新彙總(四)


分享到:


相關文章: