これは奇妙な質問のように思えるかもしれませんが、コンストラクターで引数を順序付けする方法、特にコンストラクターがサブクラスで「得る」引数を追加する場所に関する規則はありますか? 次のようなコードを読んでいることに気付いた後、1つあるはずです(コードはGroovyですが、それは質問には関係ありません):
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 の作成者は、新しい引数は後ろに追加する必要があると考え、Apple の作成者はそれらを前に追加する必要があると考え、GreenApple のプログラマーは次のように考えました。引数はアルファベット順にソートする必要がありますが、一緒にすると、コンストラクターがかなり乱雑になります (ここではタイプ セーフは役に立ちません。これらはすべて double です)。
偶然にも (実際にはそうではありませんが)、これらは私が存在する可能性がある 3 つの規則でもあります。それで、私の質問は今、そのような慣習はありますか? もしあるとすれば、それは何ですか? また、言語間で違いはありますか?