java中父類對象引用指向子類對象


1.從對象的內存角度來理解.

假設現在有一個父類Father,它里面的變量需要占用1M內存.有一個它的子類Son,里面的變量需要占用0.5M內存.

現在通過代碼來看看內存的分配情況:

2.f = new Father();//系統將分配1M內存.

Son s = new Son();//系統將分配1.5M內存!因為子類中有一個隱藏的引用super會指向父類實例,所以在實例化子類之前會先實例化一個父類,也就是說會先執行父類的構造函數.由於s中包含了父類的實例,所以s可以調用父類的方法.

3.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內存.

4.static 顧名思義,就是靜態的,他是方法的,他屬於這個類,由於是類的方法,他可以直接引用類名來引用方法,也可以通過類的對象來引用這個方法,他既不能被子類覆蓋,也不能被子類繼承。簡單的說,他是在編譯的時候就和類幫定在一起了,不能被運行時動態加載。

對子類與父類的static問題

——沒覆蓋也沒繼承,子類存有指向父類的引用

對於private

——該方法或屬性只能在該類內使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM