JAVA多態中的隱藏和覆蓋

Java的引用變量有兩個類型,一個是編譯時類型,一個是運行時類型

  • 編譯時類型:由聲明該變量時使用的類型決定
  • 運行時類型:由該變量指向的對象類型決定

若是編譯時類型和運行時類型不一致,會出現所謂的多態。由於子類實際上是一種特殊的父類,所以java容許把一個子類對象直接賦值給一個父類引用變量,無須任何類型轉換,或者被稱爲向上轉型,由系統自動完成。java

如 :code

Father f = new Son();

Son是Father的子類,引用變量f就會出現編譯時類型和運行時類型不一致的狀況,編譯時是Father類型的,運行時是Son類型。當變量的編譯時類型和運行時類型不一致時,經過變量訪問它所引用的對象的實例時,該實例變量的值由聲明該變量的類型決定。經過變量訪問它所引用的對象的方法時,該方法的行爲由所引用的對象實際類型所決定。對象

使用f時:

  • 獲取static成員變量成員變量static方法使用的是Father中的類型
  • 獲取方法使用的是Son中的類型
相關文章
相關標籤/搜索