Причина, по которой вы думаете, , что вы хотели это сделать, заключается в том, что вы оказались в ситуации, когда тип переменной не имеет достаточного контекста.
Например, я мог бы обмануть себя, думая, что мне нужно дать моему классу 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) { ... }
Если вы думаете, что это яснее, чем фабричные методы, это вопрос вкуса. В этом конкретном случае мое собственное ощущение состоит в том, что эти два класса координат используются только в том случае, если ваш проект делает координаты полезными самостоятельно, отдельно от точки в этих координатах.