Inheritance 构造函数中的参数顺序是否有约定,特别是对于子类?
这似乎是一个奇怪的问题,但对于如何在构造函数中排序参数,特别是在子类中向何处添加构造函数“获得”的参数,是否有一个约定?在我发现自己阅读了这样的代码(代码是Groovy,但这与问题并不相关)之后,我觉得应该有一个: 如上所述,一旦我们到达GreenApple,构造函数参数中可能存在的任何顺序都将消失。但是,请注意,程序员并不是随机添加新参数的——《食品》的作者认为新参数应该添加在后面,《苹果》的作者认为新参数应该添加在前面,而《绿苹果》的程序员认为这些参数应该按字母顺序排列,但要放在一起,他们让构造器相当混乱(类型安全在这里是没有用的,这些都是双重的)Inheritance 构造函数中的参数顺序是否有约定,特别是对于子类?,inheritance,constructor,conventions,cross-language,Inheritance,Constructor,Conventions,Cross Language,这似乎是一个奇怪的问题,但对于如何在构造函数中排序参数,特别是在子类中向何处添加构造函数“获得”的参数,是否有一个约定?在我发现自己阅读了这样的代码(代码是Groovy,但这与问题并不相关)之后,我觉得应该有一个: 如上所述,一旦我们到达GreenApple,构造函数参数中可能存在的任何顺序都将消失。但是,请注意,程序员并不是随机添加新参数的——《食品》的作者认为新参数应该添加在后面,《苹果》的作者认为新参数应该添加在前面,而《绿苹果》的程序员认为这些参数应该按字母顺序排列,但要放在一起,他们让
巧合的是(不是真的),这也是我认为可能存在的三个惯例。所以,我现在的问题是,是否有这样一个惯例,如果有,是什么惯例?语言之间有区别吗?据我所知,没有任何“硬”约定,比如按字母顺序排序参数之类的。构造函数中的IMHO参数或任何函数中的IMHO参数都应该从最重要到最不重要排序。当然,这需要解释,但这不是团队成员之间良好沟通无法解决的问题 实际上,在大多数情况下,如果子类仍然需要从外部传递构造函数参数,我希望它们不会重新排序。但可能有非常合理的理由做出例外
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;
}
}