java學習之編譯時類型和運行時類型

 看書的時候看到這個定義,有點不明白,到網上查詢了下,就copy過來了..

 


Java中的許多對象(一般都是具有父子類關係的父類對象)在運行時都會出現兩種類型:編譯時類型和運行時類型,例如:Person person = new Student();這行代碼將會生成一個person變量,該變量的編譯時類型是Person,運行時類型是Student。

    說明一下編譯時類型和運行時類型:
    Java的引用變量有兩個類型,一個是編譯時類型,一個是運行時類型,編譯時類型由聲明該變量時使用的類型決定,運行時類型由實際賦給該變量的對象決定。如果編譯時類型和運行時類型不一致,會出現所謂的多態。因爲子類其實是一種特殊的父類,因此java允許把一個子類對象直接賦值給一個父類引用變量,無須任何類型轉換,或者被稱爲向上轉型,由系統自動完成。
    引用變量在編譯階段只能調用其編譯時類型所具有的方法,但運行時則執行它運行時類型所具有的方法,因此,編寫Java代碼時,引用變量只能調用聲明該變量所用類裏包含的方法。與方法不同的是,對象的屬性則不具備多態性。通過引用變量來訪問其包含的實例屬性時,系統總是試圖訪問它編譯時類所定義的屬性,而不是它運行時所定義的屬性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章