Java SE Lesson 2
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 關鍵字。