Ответ 1
Он не встроен в язык, потому что не существует разумной реализации по умолчанию.
Конструкторы копирования страдают от многих тех же двусмысленностей, что и клонирование. Например, хотите ли вы сделать мелкую копию или глубокую копию, зависит от ваших конкретных обстоятельств.
Скажем, у вас есть класс Order
со свойством Customer
. Должен ли его конструктор копирования создать нового клиента или указать на исходный экземпляр? Возможно, исходный экземпляр - но как насчет Order.Payment
?
Хуже того, даже если вы хотите выполнить глубокую копию, вы даже не сможете создать все свои подчиненные объекты, потому что их конструкторы (или сопоставимые методы factory) могут быть недоступны.
В случае, если этого недостаточно, в этой статье по проблемам проектирования Java выделяются некоторые другие проблемы (например, усечение типа).