繼承與多型及抽象類與介面
繼承關鍵字 extends
子類extends基類
重寫(覆蓋):子類和基類中方法和引數列表都相同
編譯期----靜態聯編
執行期-----動態聯編
多型發生在執行期,當基類為抽象類,子類為實現抽象類的重寫方法時,基類物件呼叫子類中該抽象類的重寫方法時,就會產生多型
RTTM 執行時的型別資訊:
所有物件的型別物件都在class物件裡面儲存,方法與型別對應
java編譯器把類的例項方法都預設處理成了virtual(虛擬函式)
重寫許可權不能降低,private基類/static方法/基類構造方法不能被重寫,final 方法不能被重寫或繼承
抽象類與普通類的唯一區別:不能建立物件
抽象類內不一定有抽象方法,但抽象方法的類一定是抽象類
抽象類建構函式數可以發生多型
private可以繼承,但繼承過來不能被訪問,static和final不能放在一起
介面:一種功能的約定,可定製,關鍵詞interface , 實現連線詞implements
類的繼承只能繼承一個基類,但介面可以被繼承多個
Object類中有的方法:
getClass(); hashCode(); Clone(); equals(); toString(); finalize();
hashCode()用來返回物件的記憶體地址,不同物件hashCode()不同,
equals預設比較引用(地址),比較值需重寫equals方法
clone可以產生新物件(相當於淺拷貝),可以自動產生建構函式,物件支援clone,必須實現clone介面,空介面稱標記介面
final的三個使用1.定義常量 2,.定義方法 3.final 密封
finalize 呼叫時間不確定,回收釋放本地資源,呼叫本地方法中的方法時必須使用finalize,只調用一次
hashcode 相同,equals一定相同
equals相同,hashcode 不一定相同
成員變數一般設定為private,如果該類設定基類,成員變數設定為pretect,成員方法打算為使用者使用,方法實現為public
靜態內部類不能訪問外部類的成員變數,可以訪問靜態成員變數
外部類前可以加的修飾詞有public / abstract /final /strictfp
單例模式:永遠只能得到這個類的一個物件
快載入:在使用物件之前就已經new好了一個物件
慢載入:在需要使用物件進行呼叫物件時才new一個物件
JVm保證靜態域內容開闢和初始化是一個原子操作(不會被執行緒排程機制打斷的操作,一旦開始,就直到執行結束)
例項內部類:外部類的一個例項成員
例項內部類中不能定義static成員?
靜態物件是預設載入的,靜態內部類應該先於外部類被載入到記憶體中,而內部靜態類不能直接被例項化,必須例項化外部類才能再去例項化它,矛盾。
本地內部類:把類定義在方法裡面static/例項方法