Inheritance 构造函数中的参数顺序是否有约定,特别是对于子类?

Inheritance 构造函数中的参数顺序是否有约定,特别是对于子类?,inheritance,constructor,conventions,cross-language,Inheritance,Constructor,Conventions,Cross Language,这似乎是一个奇怪的问题,但对于如何在构造函数中排序参数,特别是在子类中向何处添加构造函数“获得”的参数,是否有一个约定?在我发现自己阅读了这样的代码(代码是Groovy,但这与问题并不相关)之后,我觉得应该有一个: 如上所述,一旦我们到达GreenApple,构造函数参数中可能存在的任何顺序都将消失。但是,请注意,程序员并不是随机添加新参数的——《食品》的作者认为新参数应该添加在后面,《苹果》的作者认为新参数应该添加在前面,而《绿苹果》的程序员认为这些参数应该按字母顺序排列,但要放在一起,他们让

这似乎是一个奇怪的问题,但对于如何在构造函数中排序参数,特别是在子类中向何处添加构造函数“获得”的参数,是否有一个约定?在我发现自己阅读了这样的代码(代码是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;
    }
}