final關鍵字
學習了繼承後,我們知道,子類可以在父類的基礎上改寫父類內容,比如,方法重寫。那麼我們能不能隨意地繼承API中提供的類,改寫其內容呢?顯然這是不合適的。為了避免這種隨意改寫的情況,Java提供了 final 關鍵字,用於修飾不可改變內容。final : 不可改變。可以用於修飾類、方法和變量。類:被修飾的類,不能被繼承。方法:被修飾的方法,不能被重寫。變量:被修飾的變量,不能被重新賦值。修飾類的 使用格式:final class 類名 {}查詢 API發現像 public final class String 、 public final class Math 、 public final class Scanner等,很多我們學習過的類,都是被final修飾的,目的就是供我們使用,而不讓我們所以改變其內容。修飾方法的格式:修飾符 final 返回值類型 方法名(參數列表){ //方法體}重寫被 final 修飾的方法,編譯時就會報錯修飾變量:
1. 局部變量——基本類型
基本類型的局部變量,被final修飾後,只能賦值一次,不能再更改。代碼如下:
2. 局部變量——引用類型
引用類型的局部變量,被final修飾後,只能指向一個對象,地址不能再更改。但是不影響對象內部的成員變量值的修改,代碼如下:
3. 成員變量
成員變量涉及到初始化的問題,初始化方式有兩種,只能二選一:
顯示初始化;
構造方法初始化。
被final修飾的常量名稱,一般都有書寫規範,所有字母都大寫。
權限修飾符
在Java中提供了四種訪問權限,使用不同的訪問權限修飾符修飾時,被修飾的內容會有不同的訪問權限,
public :公共的。protected :受保護的default :默認的private :私有的
public具有最大權限。private則是最小權限。
編寫代碼時,如果沒有特殊的考慮,建議這樣使用權限:
成員變量使用 private ,隱藏細節。構造方法使用 public ,方便創建對象。成員方法使用 public ,方便調用方法。小貼士:不加權限修飾符,其訪問能力與default修飾符相同
內部類
什麼是內部類
將一個類A定義在另一個類B裡面,裡面的那個類A就稱為內部類,B則稱為外部類。成員內部類
成員內部類 :定義在類中方法外的類。
格式:class 外部類 {
class 內部類{
}
}
在描述事物時,若一個事物內部還包含其他事物,就可以使用內部類這種結構。比如,汽車類 Car 中包含發動機類 Engine ,這時, Engine 就可以使用內部類來描述,定義在成員位置。
代碼舉例:
訪問特點
內部類可以直接訪問外部類的成員,包括私有成員。外部類要訪問內部類的成員,必須要建立內部類的對象。創建內部類對象格式:
外部類名.內部類名 對象名 = new 外部類型().new 內部類型();
內部類仍然是一個獨立的類,在編譯之後會內部類會被編譯成獨立的 .class文件,但是前面冠以外部類的類名和$符號 。
比如,Person$Heart.class
匿名內部類【重點】
匿名內部類 :是內部類的簡化寫法。它的本質是一個 帶具體實現的 父類或者父接口的 匿名的 子類對象。
開發中,最常用到的內部類就是匿名內部類了。以接口舉例,當你使用一個接口時,似乎得做如下幾步操作,
1. 定義子類
2. 重寫接口中的方法
3. 創建子類對象
4. 調用重寫後的方法
我們的目的,最終只是為了調用方法,那麼能不能簡化一下,把以上四步合成一步呢?匿名內部類就是做這樣的快捷方式。
前提 匿名內部類必須繼承一個父類或者實現一個父接口。
引用類型用法總結
實際的開發中,引用類型的使用非常重要,也是非常普遍的。我們可以在理解基本類型的使用方式基礎上,進一步去掌握引用類型的使用方式。基本類型可以作為成員變量、作為方法的參數、作為方法的返回值,那麼當然引用類型也是可以的。
類作為成員變量時,對它進行賦值的操作,實際上,是賦給它該類的一個對象。