2011-12-20 64 views
0

如果某個類沒有提供任何構造函數,編譯器將提供一個默認構造函數,該構造函數又調用超類的無參數。爲什麼要調用超類的無參數構造函數?調用超類的參數構造函數

+1

你的第一句話並不完全準確。編譯器將只**提供一個默認的無參數構造函數**如果你自己沒有提供任何構造函數**。只要添加構造函數,無論它接受多少個參數,默認的no-arguments構造函數都不會由編譯器生成。 – ivantod 2011-12-20 18:00:23

+0

@ivantod我同意你的意見....我已經糾正了它.. – Rekha 2011-12-20 18:01:42

+0

也爲了安全,如果超級類沒有沒有參數構造函數呢? – Stefan 2011-12-20 18:51:34

回答

4

要初始化超(繼承)該類別的一部分

2

這樣就可以初始化超類的屬性,以及。

1

是否有意義的對象的構造函數只有部分構造對象?

0

它是子類實例與其超類的「is-a」關係的一部分。如果SpottedFooFoo的子類(例如,每個SpottedFoo「是-a」Foo),則應當調用Foo構造函數。

否則,如果由Foo構造函數執行的初始化(私有或不是)被跳過,那麼SpottedFoo不能保證它可以像Foo那樣操作。

這是實現繼承協議的一部分:每個子類實例必須能夠像其超類的任何其他成員一樣行事。這是Liskov substitution principle.