1. 程式人生 > >繼承與多型及抽象類與介面

繼承與多型及抽象類與介面

繼承關鍵字 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/例項方法