[6]單態和繼承
一.static關鍵字
1.什麼是static關鍵字
static代表靜態的, 可以修飾類的成員, 都和類加載有關.
* 2.靜態變量
類加載後初始化
可以通過"類名.變量名"訪問
被該類所有實例共享
當定義一個變量希望被共享, 或者類加載後就能使用時, 就定義爲靜態的.
* 3.靜態方法
類加載後可以調用
可以通過"類名.方法名"訪問
不能使用外部非靜態成員
當定義一個方法時, 這個方法不訪問外部任何非靜態成員, 就可以定義爲靜態的, 這樣做不用再創建對象就能使用.
4.靜態代碼塊
類加載後就執行
不能使用外部非靜態成員
當有一些代碼希望在類加載之後就執行, 且只執行一次的時候, 就可以定義爲靜態代碼塊.
二.垃圾回收
1.finalize
在一個類中寫了finalize方法之後, 對象銷燬時會執行這個方法中的代碼
2.gc
System.gc()可以通知虛擬機銷燬內存中的垃圾對象
三.單態設計模式
1.什麼是單態設計模式
當定義一個類, 而希望這個類只能創建一個對象時, 可以使用單態設計模式
2.單態設計模式的寫法
私有化構造函數
類內部創建對象, 用成員變量引用, 私有化防止類外修改
提供一個公有的靜態的方法, 讓類外可以獲取到該對象
四.繼承
1.什麼是繼承
一個類可以使用extends繼承另一個類, 子類繼承父類之後得到父類的所有成員. 提高代碼複用性.
2.繼承的特點
Java只支持單繼承, 不支持多繼承, 但是可以多重繼承.
*** 3.類型轉換
子類對象可以當作父類對象使用, 因爲父類有的子類都有.
一個父類引用可以指向一個子類對象, 但是這時不能調用子類特有的方法.
子類當父類用時, 如果要調用子類特有的方法, 可以使用強制類型轉換將父類變量強轉回子類.
強制類型轉換時, 不論類型是否匹配, 編譯都不會報錯, 運行時類型不匹配會拋出異常ClassCastException
在強制類型轉換之前, 通常都使用instanceof進行類型判斷.
*** 4.重寫方法
子類覆蓋父類的方法時, 返回值類型, 方法名, 參數列表必須全部相同.
不能定義更低的訪問權限.
可以使用"super.方法名"訪問父類的方法.
在調用一個對象的方法時, 該對象是哪個類的對象就先找哪個類, 如果這個類中有指定方法就執行, 沒有就找父類.
在重寫方法時, 可以使用@Override來檢查當前方法是否成功覆蓋父類方法, 如果沒有覆蓋, 編譯會報錯.
*** 5.子類對象的創建
創建子類對象的時候, 會先創建一個父類對象.
在執行子類構造函數的時候, 會先執行父類構造函數.
通過super()可以調用父類構造函數, 如果不指定, 那麼就調用無參的.
super()和this()相同, 都只能是構造函數的第一個語句. 二者不能同時出現在一個構造函數中.