簡體   English   中英

轉換為父類型-Java

[英]Casting to parent type — Java

這是一個驗證:

將子對象轉換為父類型有什么好處嗎?

假設我有兩個類ParentChild 孩子正在擴展父母

代碼有什么區別嗎

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM