Ну, это может. Это просто не создается неявно. Если бы мне пришлось угадывать, это, вероятно, связано с тем фактом, что объекты Java всегда размещаются в куче.
В C ++ конструктором копирования по умолчанию является мелкая копия для каждого члена. Если классу принадлежит память, выделенная в куче (через необработанный указатель), это приведет к тому, что копия поделится внутренними данными с оригиналом, а это не то, что вам нужно.
Вообразите на мгновение, что у Java было такое поведение. Любой класс, у которого есть поля, являющиеся объектами (читай: по сути, все они), будет иметь неправильное поведение, и вам придется переопределить его самостоятельно. В 99% случаев вы никого не спасли. Кроме того, вы только что создали тонкую ловушку для себя - представьте, что вы случайно забыли переопределить конструктор копирования по умолчанию. Если он был сгенерирован по умолчанию и вы пытаетесь его использовать, компилятор вообще не будет жаловаться, но ваша программа будет плохо себя вести во время выполнения.
Даже если бы они сделали конструктор копирования по умолчанию, который выполняет глубокое копирование, я не уверен, что это будет особенно полезно. В любом случае вы не только выполняете меньше копий в Java, чем в C ++, но не всегда хотите глубоко копировать поле.
Объекты, которыми вы владеете, и объекты, на которые вы ссылаетесь, потому что они вам нужны, но не несут ответственности, - это одно и то же - только поля. Собственность и заимствование не являются первоклассными понятиями. Для объектов, которыми вы владеете, вы захотите глубоко копировать их (если они не являются неизменяемыми, в этом случае вам не нужно беспокоиться), а для объектов, на которые вы просто ссылаетесь, вы хотите скопировать ссылку.
Я бы сказал, что конструктор копирования, который просто бездумно копирует все, также не подходит для многих классов. Конечно, это больше, чем поверхностное копирование по умолчанию.