從物件的記憶體角度來理解試試.
假設現在有乙個父類father,它裡面的變數需要占用1m記憶體.有乙個它的子類son,它裡面的變數需要占用0.5m記憶體.
現在通過**來看看記憶體的分配情況:
father f = new father();//系統將分配1m記憶體.
son s = new son();//系統將分配1.5m記憶體!因為子類中有乙個隱藏的引
用super會指向父類例項,所以在例項化子類之前會先例項化乙個父類,也就是說會先執行父類的建構函式.由於s中包含了父類的例項,所以s可以呼叫父類的方法.
son s1 = s;//s1指向那1.5m的記憶體.
father f1 = (father)s;//這時f1會指向那1.5m記憶體中的1m記憶體,即是說,f1只是指向了s中例項的父類例項物件,所以f1只能呼叫父類的方法(儲存在1m記憶體中),而不能呼叫子類的方法(儲存在0.5m記憶體中).
son s2 = (son)f;//這句**執行時會報classcastexception.因為f中只有1m記憶體,而子類的引用都必須要有1.5m的記憶體,所以無法轉換.
son s3 = (son)f1;//這句可以通過執行,這時s3指向那1.5m的記憶體.由於f1是由s轉換過來的,所以它是有1.5m的記憶體的,只是它指向的只有1m記憶體.
static 顧名思義,就是靜態的,他是方法的,他屬於這個類,由於是類的方法,他可以直接引用類名來引用方法,也可以通過類的物件來引用這個方法,他既不能被子類覆蓋,也不能被子類繼承。簡單的說,他是在編譯的時候就和類幫定在一起了,不能被執行時動態載入。
對子類與父類的static問題
——沒覆蓋也沒繼承,子類存有指向父類的引用
對於private
——該方法或屬性只能在該類內使用
Java父類引用指向子類物件的簡單理解
1 通過將父類的引用指向了子類的物件,提高程式的擴充套件性。2 通過傳遞子類物件的方式去父類中查詢是否存在子類物件呼叫的方法,如果父類中存在子類物件呼叫的方法,同時子類物件中存在通方法覆蓋,將執行子類中的覆蓋方法,如果子類中沒有覆蓋方法,將執行父類中提供的方法。3 將父類引用強制轉型,通過將父類引用...
android中Logcat的深層理解
android的開發也可以歸類為嵌入式裝置的開發,即便不是嵌入式開發,依然要注意對記憶體和處理的使用。養成乙個好的習慣對自己的幫助是很大的。在log的原始碼中可以看到這樣的注釋 the order in terms of verbosity,from least to most is error,w...
如何理解父類引用指向子類物件
從物件的記憶體角度來理解試試.假設現在有乙個父類father,它裡面的變數需要占用1m記憶體.有乙個它的子類son,它裡面的變數需要占用0.5m記憶體.現在通過 來看看記憶體的分配情況 father f new father 系統將分配1m記憶體.son s new son 系統將分配1.5m記憶體...