デフォルトコンストラクタ自動生成の謎

半年位前に経験したバグなのですが、突然あるクラスのデフォルトコンストラクタが見つかりませんという内容のExceptionが発生しました。
原因は他プロジェクトのjarに梱包された型をデフォルトコンストラクタでインスタンス化していたのですが、このjar側のデグレードでデフォルトコンストラクタがなくなったことでした。
詳細には、デフォルトコンストラクタを定義していないクラスに対して、引数付きコンストラクタを拡張したことで暗黙のデフォルトコンストラクタが消えたことによるデグレです。
デフォルトコンストラクタの参照が別プロジェクトだったためコンパイルエラーが起こらずに気が付かなかったようです。


Javaの仕様においてコンストラクタを1つも定義していない場合、コンパイル時に自動的に引数を持たない空のコンストラクタが作成されます。しかし、引数ありのコンストラクタを1つ以上定義した場合、空のコンストラクタは自動生成されません。
この暗黙のデフォルトコンストラクタの挙動を知っていたとしても、コンストラクタ拡張はメソッドのオーバーロード的な感覚のため、今回のようなデグレは十分に起こりえると思います。


暗黙のデフォルトコンストラクタ自動生成は可読性のためと思われますが、引数付きコンストラクタが存在する場合にデフォルトコンストラクタが自動生成されなくなる理由はなんででしょう?
インスタンス化されたオブジェクトが明確な初期化が行われたことを保障するためなんでしょうか。
明確な初期化を保障することとデグレを起こしやすい言語仕様と比べたときに微妙な気もします。


Rubyの場合も、引数ありinitialize(コンストラクタみたいなもの)を宣言するとデフォルトコンストラクタはなくなるみたいです。
ただ単にメソッドのオーバーロードはないのでデフォルトコンストラクタを上書きしているだけなのかも知れません。