1. 多型:父類型的引用可以指向子類型的物件。
2. Parent p = new Child();當使用多態方式調用方法時,首先檢查父類中是否有sing()方法,如果沒有則編譯錯誤;如果有,再去調用子類的 sing()方法。
3. 一共有兩種類型的強制類型轉換:
a) 向上類型轉換(upcast):比如說將 Cat 類型轉換為 Animal 類型,即將子類型轉換為父類型。對於向上類型轉換,不需要顯式指定。
b) 向下類型轉換(downcast):比如將 Animal 類型轉換為 Cat 類型。即將父類型轉換為子類型。對於向下類型轉換,必須要顯式指定(必須要使用強制類型
轉換)。
4. 抽象類別(abstract
class):使用了 abstract 關鍵字所修飾的 類叫做抽象類別。抽象類無法產生實體,也就是說,不能 new 出來一個抽象類別的物件(實例)。
5. 抽象方法(abstract method):使用 abstract 關鍵字所修飾的方法叫做抽象方法。抽象方法需要定義在抽象類別中。相對於抽象方法,之前所定義的方法叫做具體方法(有聲明,有實現)。
6. 如果一個類包含了抽象方法,那麼這個類一定是抽象類別。
7. 如果某個類是抽象類別,那麼該類可以包含具體方法(有聲明、有實現)。
8. 如果一個類中包含了抽象方法,那麼這個類一定要聲明成 abstract class,也就是說,該類一定是抽象類別;反之,如果某個類是抽象類別,那麼該類既可以包含抽象方法,也可以包含具體方法。
9. 無論何種情況,只要一個類是抽象類別,那麼這個類就無法產生實體。
10. 在子類繼承父類(父類是個抽象類別)的情況下,那麼該子類必須要實現父類中所定義的所有抽象方法;否則,該子類需要聲明成一個 abstract class。
11. 介面(interface):介面的地位等同於 class,介面中的所有方法都是抽象方法。在聲明介面中的方法時,可以使用 abstract 關鍵字,也可以不使用。通常情況下,都會省略掉 abstract 關鍵字。
12. 可以將介面看作是特殊的抽象類別(抽象類別中可以有具體方法,也可以有抽象方法,而介面中只能有抽象方法,不能有具體方法)。
13. 類可以實現介面。實現使用關鍵字 implements 表示,代表了某個類實現了某個介面。
14. 一個類實現了某個介面,那麼該類必須要實現介面中聲明的所有方法。如果
該類是個抽象類別,那麼就無需實現介面中的方法了。
15. Java 是單繼承的,也就是說某個類只能有唯一一個父類;一個類可以實現多個介面,多個介面之間使用逗號分隔。
16. 多態:所謂多態,就是父類型的引用可以指向子類型的物件,或者介面類別型的引用可以指向實現該介面的類的實例。關於介面與實現介面的類之間的強
制類型轉換方式與父類和子類之間的強制類型轉換方式完全一樣。
17. static 關鍵字:可以用於修飾屬性,也可以用於修飾方法,還可以用於修飾類
18. static 修飾屬性:無論一個類生成了多少個物件,所有這些物件共同使用唯一一份靜態的成員變數;一個物件對該靜態成員變數進行了修改,其他物件
的該靜態成員變數的值也會隨之發生變化。如果一個成員變數是 static 的,那麼我們可以通過類名.成員變數名的方式來使用它(推薦使用這種方式)。
19. static 修飾方法:static 修飾的方法叫做靜態方法。對於靜態方法來說,可以使用類名.方法名的方式來訪問。
20. 靜態方法只能繼承,不能重寫(Override)。
21. final 關鍵字:final 可以修飾屬性、方法、類。
22. final 修飾類:當一個類被 final 所修飾時,表示該類是一個終態類,即不能被繼承。
23. final 修飾方法:當一個方法被 final 所修飾時,表示該方法是一個終態方法,即不能被重寫(Override)。
24. final 修飾屬性:當一個屬性被 final 所修飾時,表示該屬性不能被改寫。
25. 當 final 修飾一個原生資料類型時,表示該原生資料類型的值不能發生變化(比如說不能從 10 變為 20);如果 final 修飾一個參考類型時,表示該引用類型不能再指向其他物件了,但該引用所指向的物件的內容是可以發生變化
的。
26. 對於 final 類型成員變數,一般來說有兩種賦初值方式:
a) 在聲明 final 類型的成員變數時就賦上初值
b) 在聲明 final 類型的成員變數時不賦初值,但在類的所有構造方法中都為其賦上初值。
27. static 代碼塊:靜態代碼塊。靜態代碼塊的作用也是完成一些初始化工作。首先執行靜態代碼塊,然後執行構造方法。靜態代碼塊在類被載入的時候執行,
而構造方法是在生成物件的時候執行;要想調用某個類來生成物件,首先需
要將類載入到 Java 虛擬機器上(JVM),然後由 JVM 載入這個類來生成物件。
28. 類的靜態代碼塊只會執行一次,是在類被載入的時候執行的,因為每個類只
會被載入一次,所以靜態代碼塊也只會被執行一次;而構造方法則不然,每
次生成一個物件的時候都會調用類的構造方法,所以 new 一次就會調用構造
方法一次。
29. 如果繼承體系中既有構造方法,又有靜態代碼塊,那麼首先執行最頂層的類
的靜態代碼塊,一直執行到最底層類的靜態代碼塊,然後再去執行最頂層類
的構造方法,一直執行到最底層類的構造方法。注意:靜態代碼塊只會執行
一次。
30. 不能在靜態方法中訪問非靜態成員變數;可以在靜態方法中訪問靜態的成員
變數。可以在非靜態方法中訪問靜態的成員變數。
31. 總結:靜態的只能訪問靜態的;非靜態的可以訪問一切。
32. 不能在靜態方法中使用 this 關鍵字。