[英]Casting to parent type — Java
這是一個驗證:
將子對象轉換為父類型有什么好處嗎?
假設我有兩個類Parent和Child 。 孩子正在擴展父母 。
代碼有什么區別嗎
Parent p = new Child();
和
Parent p = (Parent) new Child();
?
p在調用其任何方法或以任何方式訪問其任何一個成員時,行為會有所不同嗎?
從我的角度來看,兩者是相同的,此處的轉換是多余的。
// ==================================
編輯:我一直在尋找具有控制,作為開發者,在其方法call-- 子女或父母的方法,從外面兒童 。
因此,無論子類中是否重寫該方法,編碼器都將嘗試調用Parent方法。 也就是說,將繞過子類的重寫方法,並且將在Child對象上調用該方法的Parent實現。
不,無論調用該方法的引用類型如何,該對象的行為都相同。
這是設計使然-允許子類覆蓋其超類的方法。
在您的示例中,分配前的上行無效沒有作用-它會作為分配的一部分隱式發生。
Parent p = (Parent) new Child();
調用者不能強迫對象忽略其方法重寫。 這是一件好事 。 否則,孩子將永遠無法執行自己的內部不變式。
如果您希望允許調用者選擇是調用父方法還是子方法, 那么您的API可以提供兩種方法 。 父母和孩子都可以決定如何撫養彼此。
回答您的第二個問題:設計上是不可能的。 如果子方法覆蓋了子方法,則無法調用該方法,除非子方法中的代碼除外。 如果孩子想允許這樣做,則可以提供另一個方法,該方法使用super來調用覆蓋的父方法。 當然,第二種方法將需要使用其他名稱。
稱為多態。 如果子級重寫方法,則始終會調用子級實現。 無論變量是什么類型。 只有在相反的情況下才需要強制轉換-如果要在知道其類型為Child的Object上調用Child Methods,但將該Variable聲明為Partent。 但是它通常很難轉換變量的樣式(這是例外,例如equals方法)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.