Причины вы бы думать вы хотели бы сделать это, что вы нашли себя в ситуации, когда переменные типа не достаточно контекст.
Например, я мог бы одурачить себя мыслью, что мне нужно дать свои два класса класса Point: один, который работает по X и Y, и поровну, и радиан. Оба могут быть представлены как float.
Так что я думаю, мне нужны были два конструктора с одинаковыми сигнатурами (float, float).
Dr.Блох отмечает, что это лучше сделать фабричные методы:
public static Point newPointByDegreesAndRadians (float degrees, float radians);
public static Point newPointByXandY (float x, float y);
Кстати, еще одна альтернатива фабричных методов для создания типов, которые несут в себе контекст, который отсутствует из типов данных, как это:
public class CoordinatesXY {
float X;
float Y;
...
}
public class CoordinatesDegreesRadians {
float degrees;
float radians;
...
}
public Point (CoordinatesXY coordinates) { ... }
public Point (CoordinatesDegreesRadians coordinates) { ... }
Думаете ли вы, что это яснее, чем фабричные методы - это вопрос вкуса. Для этого конкретного случая мое собственное чувство состоит в том, что два класса координат полезны только в том случае, если ваш дизайн делает координаты полезными сами по себе, отдельно от точки в этих координатах.
erm, вы не можете, не так ли? –
Во-первых, не могли бы вы показать нам пример, который компилируется? –
Для записи вы имеете в виду два конструктора * в том же классе * с одной и той же сигнатурой? – harpo