这似乎是一个奇怪的问题,但是关于如何在构造函数中排序参数,特别是在子类中添加构造函数“获得”的参数的位置是否有约定?在我发现自己阅读了这样的代码之后,在我看来应该有一个(代码是 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 的程序员认为参数应该按字母顺序排序,但是它们一起使构造函数变得相当混乱(并且类型安全在这里没有用,这些都是双精度的)。
巧合的是(嗯,不是真的),这也是我可能存在的三个约定。所以,我现在的问题是,是否有这样的约定,如果有,它是什么?语言之间有区别吗?