2014-02-12 3 views
1

이것은 궁금한 질문처럼 보일지 모르지만, 생성자에서 인수를 정렬하는 방법에 대한 규칙이 있으며 특히 하위 클래스에 인수 "생성자"를 추가하는 위치는 무엇입니까? 나 자신 (코드 그루비입니다,하지만 정말 질문에 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의 저자는 새로운 주장이 뒷부분에 추가되어야한다고 믿었고, Apple 저자는 GreenApple 생각의 프로그래머라고 생각했다. 인수는 사전 순으로 정렬해야하지만 함께 사용하면 생성자가 상당히 지저분 해집니다 (유형 안전성은 여기서는 사용하지 않습니다. 모두 2 배입니다).

우연히 (물론, 실제로는 아닙니다), 이것들은 내가 있을지도 모르는 3 개의 규칙이기도합니다. 그래서 제 질문은 지금 그러한 대회가 있습니까? 있다면, 그것이 무엇입니까? 언어별로 차이가 있습니까?

답변

0

내가 아는 한 최선의 방법은 알파벳 순서 또는 그와 비슷한 것을 정렬하는 것과 같은 "어려운"규칙이 없습니다. 생성자 나 그 함수에 대한 IMHO 인수는 가장 중요도가 가장 높은 것부터 가장 중요하지 않은 것으로 정렬해야합니다. 물론 해석의 대상이되지만 팀원 간의 원활한 의사 소통으로는 해결할 수없는 문제는 아닙니다.

실제로 대부분의 경우 하위 클래스가 외부에서 전달해야하는 경우 생성자 인수를 재정렬하지 않을 것으로 예상됩니다. 그러나 예외를 만들 수있는 매우 유효한 이유가있을 수 있습니다.