2015-10-31 31 views
2

我不知道如果我問這個正確的,但我在分配給一個子類可以創建抽象類型超類的對象嗎?

ClassA的是抽象的

ClassB的延伸A類

然後在ClassB的主要方法有:

ClassA obj = new ClassB();

這裏發生了什麼以及這樣做的目的是什麼?

+1

_you_認爲發生了什麼? –

+0

我明白,如果一個孩子繼承超級,那麼可以創建一個超級/孩子的對象。但我很困惑,因爲我知道我們不能創建抽象的對象 –

+3

您並沒有創建抽象類的對象。您正在創建'ClassB'的對象並*將它分配給'ClassA'類型的引用。 – Pshemo

回答

3

您永遠無法創建來自抽象類的對象。永遠。期。

這裏你的變量被賦值的對象是抽象類型,但變量引用的對象本身不是並且永遠不會。參考變量和參考變量之間的區別是一個必須理解的關鍵概念,但一旦你得到它,你就會變成「a-ha!」。

1

是的,這是完全可能的。所以抽象類就像一個合約。您將只在Abstract類中提供方法聲明。提供定義是兒童班的責任。因此,B類將負責定義A類聲明的任何方法的行爲。如果我們想在子類中強制執行默認行爲,我們會這樣做。請閱讀文檔以獲取更多詳細信息和示例。

2

這確實是多態性的主要部分。首先,是的,你編寫的代碼就是它會如何發生。我認爲理解它的最簡單方法(無論如何)是看看遊戲的行爲。

超類項目是抽象的 在這個Item類中,我們有項目的紋理/ ID /名稱等變量。然後,我們製作Item超類的子類,這些將是其更具體區域中的所有物品(例如武器,貨幣,食物等)。當然,在他們的課堂上,他們將獲得幫助他們脫穎而出的細節。

最後。爲什麼?那麼如果你必須加載所有這些項目,那麼單獨指定所有不同的孩子將是一種絕對的痛苦。例如,您可以將所有子類放入數組,列表或地圖中。所有這些都將在Item類名下。這樣,超類的所有子類都可以放入一個容器中,以便一次性輕鬆處理所有這些類。

+0

謝謝。我可以說obj屬於內存中的ClassA嗎? –