2011-12-28 31 views
0

可能重複:
Java Constructor Inheritance爲什麼不繼承java類構造函數呢?

當創建子類,

  1. 爲什麼我要創建一個構造函數,並在每個構造函數寫超?
  2. 如果我的行爲與超類相似,我不希望繼承它們嗎?
+4

可能已經回答了:http://stackoverflow.com/questions/1644317/java-constructor-inheritance – Eugene

+0

你不必在每個構造函數中寫'super',必然。假定超類具有默認(公共無參數)構造函數。該子類,如果你在它沒有指定構造函數,隱式獲得一個默認的構造函數只是調用'超();'在編譯時。您明確創建的任何構造將不得不'超()隱式調用;'作爲它的第一行 - 除非在構造函數的第一行中,顯式調用重載的構造函數中的一個超類(例如,'超(myParameter );')。 – hotshot309

回答

1

構造函數是不能繼承的,因爲你沒有創建父類的實例,你要創建一個新的類的實例。沒有辦法知道你想調用哪個超類的構造函數。

公平地說,缺省值(無arg構造函數)總是存在。這是你所指的具體的參數,我假設。

+0

如果向下票,解釋爲什麼請 - 我會盡量讓我的回答更好。 – Kylar

+0

如果所有super構造函數都需要args,那麼缺省構造函數不會被創建(或者會產生編譯錯誤) –

+0

只有超級中的默認值存在時纔會存在默認值。每當您創建一個類時,它將獲得一個默認構造函數。無論是否存在超級。 – Kylar

0

實際上,java總是爲您的子類創建新的構造函數,但僅限於默認的無參數構造函數。如果您的類具有默認(無參數)構造函數以外的構造函數,則必須再次定義它們...構造函數並不是行爲方法,而是對象初始化(對於具有新屬性的子類可能會發生變化)

+0

「Always」不正確。爲沒有構造函數聲明的類提供了默認構造函數。 –

+0

對,謝謝:) – Slash

0

默認無參數默認情況下,構造函數是繼承和調用的。如果你想調用另一個,你可以使用super()。如果默認構造函數不能使用,則必須使用one4的超級構造函數

+1

構造函數永遠不會被繼承。超類的無參數構造函數將由子類的默認構造函數調用,如果有的話。 –

0

構造函數與類名稱具有相同的名稱,並且如果您能夠將它們繼承到子類中,則它們不能再是構造函數的子類。雖然默認的無參數構造函數總是被繼承。

+0

構造函數永遠不會被繼承。默認構造函數調用超類的無參數構造函數。 –

0

構造函數被調用來從類藍圖創建對象,即初始化類的數據成員。如果子類都繼承一個構造函數,然後同時調用子類,你需要有對父類的數據成員的知識太多。這不是人們在現實生活中會看到的。例如,如果您創建類型法拉利的目標,你一定會感興趣大約初始化般的速度,加速度參數,你就不會理會初始化一個Car對象的參數,即使法拉利汽車從繼承。因此,當調用法拉利的構造函數,你只會,只困擾法拉利的成員,而不是它的父類的成員。我希望能明確表達我的觀點。