java屬性為什么沒多態,而是方法多態


定義

  java多肽的特性:方法具有多態性,屬性卻沒有。

准備

  基類:

aaa

  子類:

aaa

  測試類:

aaa

  結果:

aaa

分析如下

父類 a=new 子類,實際對象時子類。由於向上轉型,我們可以用父類在編譯期間代替子類,使得編譯不報錯,當然你調用的方法必須是父類所擁有的,不然編譯監察報錯,

其實new 子類(),那么實際類型就是子類,運行期間就是子類的方法和屬性啊,而一個父類有多個子類,那么就造成多態的生成和原理,那么問題來了,為什么

我們的屬性不具有多態特性。我們直接調用屬性值,那么出來的就是父類的屬性值,為什么呢?

這個就是靜態綁定和動態綁定的問題了

編譯期間的綁定就是靜態綁定,運行期間的綁定就是動態綁定,java為了實現多態的這個機制,選擇讓方法在運行期間綁定對應對象所對應實際類型,選擇讓屬性在編譯期間綁定其所對應實際類型。那么這個問題不就解決了?

編譯期間時,肯定是父類的類型,如果直接調用屬性,故名思議則是父類所對應的屬性值。而方法則是在運行期間綁定的,這個對象實際上實際是子類對象,那么運行期間就肯定是子類類型,故方法是子類的方法,而在方法中調用的值是子類的值就更簡單了,我們調用子類的值時,實際上簡寫了this.屬性,而this卻是指當前對象。當前對象只有被實例化才會有對象,那么肯定是運行期間,故在方法里面調用屬性值是子類的值。


免責聲明!

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



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