定義
java多肽的特性:方法具有多態性,屬性卻沒有。
准備
基類:
子類:
測試類:
結果:
分析如下
父類 a=new 子類,實際對象時子類。由於向上轉型,我們可以用父類在編譯期間代替子類,使得編譯不報錯,當然你調用的方法必須是父類所擁有的,不然編譯監察報錯,
其實new 子類(),那么實際類型就是子類,運行期間就是子類的方法和屬性啊,而一個父類有多個子類,那么就造成多態的生成和原理,那么問題來了,為什么
我們的屬性不具有多態特性。我們直接調用屬性值,那么出來的就是父類的屬性值,為什么呢?
這個就是靜態綁定和動態綁定的問題了
編譯期間的綁定就是靜態綁定,運行期間的綁定就是動態綁定,java為了實現多態的這個機制,選擇讓方法在運行期間綁定對應對象所對應實際類型,選擇讓屬性在編譯期間綁定其所對應實際類型。那么這個問題不就解決了?
編譯期間時,肯定是父類的類型,如果直接調用屬性,故名思議則是父類所對應的屬性值。而方法則是在運行期間綁定的,這個對象實際上實際是子類對象,那么運行期間就肯定是子類類型,故方法是子類的方法,而在方法中調用的值是子類的值就更簡單了,我們調用子類的值時,實際上簡寫了this.屬性,而this卻是指當前對象。當前對象只有被實例化才會有對象,那么肯定是運行期間,故在方法里面調用屬性值是子類的值。