這可能看起來像一個奇怪的問題,但是有沒有關於如何在構造函數中對參數進行排序的約定,特別是在子類中爲構造函數「增益」添加參數的位置?在我看來,應該有一個,之後我發現自己讀這樣的代碼(代碼就是Groovy,但是這不是真的relvent的問題):在構造函數中是否有參數順序的約定,特別是對於子類?
class Matter {
double volume
double mass
Matter (double m, double v) {
mass = m; volume = v;
}
}
class Food extends Matter {
double nutrition
Food (double m, double v, double n) {
super (m,v); nutrition = n;
}
}
class Apple extends Food {
double sweetness
Apple (double s, double m, double v, double n) {
super (m,v,n); sweetness = s;
}
}
class GreenApple extends Apple {
double acidity
GreenApple (double a, double m, double n, double s, double v) {
super (s,m,v,n); acidity = a;
}
}
正如我在前面已經說明,一旦我們到達在GreenApple中,任何可能曾經在構造函數參數中出現的順序都沒有了。然而請注意,程序員沒有隨機添加他們的新論點--Food的作者認爲應該在後面添加新的論點,蘋果的作者認爲他們應該加在前面,而GreenApple的程序員認爲參數應按字母順序排序,但在一起時,它們使構造函數相當混亂(並且類型安全性在這裏沒有用處,這些都是雙打)。
巧合(呃,不是真的),這些也是我雖然可能會有的三個公約。所以,現在我的問題是,是否有這樣一個約定,如果有,那是什麼?它在語言之間有所不同嗎?