1. 程式人生 > >Java上(下)轉型物件

Java上(下)轉型物件

上轉型物件

上轉型物件就是宣告一個父類的引用指向子類的例項化物件,例如

A a = new B();
或者
B b = new B() ; A a = b ;
其中 A 是 B 的父類, 物件 a 就是上轉型物件
那麼為什麼需要上轉型物件,其實就是滿足一種需求,關於這個需求的內容,就是上轉型物件的作用,以下:

  • 屬性 : 上轉型物件只能訪問父類中的屬性,不能訪問子類新增的屬性,至於子類隱藏的屬性,當你使用類名.屬性名時,返回的是父類的屬性值
  • 方法 : 上轉型物件能訪問父類中的方法,不能訪問子類新增的方法,如果訪問被子類重寫的方法,呼叫的是被重寫後的方法
  • 之所以會這樣,主要是因為上轉型物件本質還是一個子類物件,當你對上轉型物件使用getClass,返回的是子類物件型別,而當宣告為父類的引用指向這個子類物件時,這個子類物件例項就被削弱了,
  • 我用一個例子通俗的解釋這個削弱的過程.
  • 假設有這樣一個修仙家族,一個年輕人學會了所有父親祖輩的功法,而這些功法有一些會根據個體身體的不同而變異,而這個年輕人就變異了其中一些功法(重寫方法),然後自己又領悟了屬於自己的一些功法(新增方法),然後在世間有些名號(新增屬性),然後他名為 飛(隱藏屬性),家族有相傳的姓 張 (繼承屬性).大事發生了,這個年輕人被自己的父親奪舍了(上轉型),而這個事情又被所有人知道了(jvm知道它是上轉型物件),然後這個父親用自己兒子的身體行走天下.祖輩相傳的功法(繼承方法)他當然能使用,那些因為變異的功法(重寫方法),因為身體的原因,也可以使用,但是兒子自己領悟的功法(新增方法)這個父親就不會了.因為天下都知道這件事,兒子以前的名號(新增屬性)就用不了,兒子的名(隱藏屬性)也不屬於父親,父親只能使用自己的名(被隱藏的名),使用祖輩相傳的姓(被繼承的屬性).就這樣,繼續行走天下.
  • 如果子類物件的重寫方法中使用了子類新增的方法,這個方法上轉型物件也可以使用.用上面的例子就是年輕人的變異功法融合了自己領悟的功法,

下轉型物件

下轉型不是將一個父類物件強轉成子類物件,這樣會直接報錯
java.lang.ClassCastException
而是將上轉型物件再轉回子類物件,使其變成一個子類物件例項,功能其實就是子類物件例項的功能

  • 繼續用我們上面的例子,就是這個年輕人其實沒有死,他又重新奪回了自己的身體,這件事又被天下知道了,他就恢復了自己的全部

哈哈,個人比較喜歡修仙小說,就這樣舉例了