У меня есть следующие примеры классов в Java:
public class A { }
public class Super {
protected Super() { }
public Super(A a) { }
}
public class Sub extends Super { }
public class Consumer {
public Consumer() {
Sub sub = new Sub(new A()); //compiler error
}
}
Ошибка компилятора указывает, что аргументы не могут быть применены к конструктору по умолчанию в Sub, что совершенно понятно.
Что мне любопытно, так это обоснование этого решения. Java создает пустой конструктор по умолчанию в Sub
; почему в этом случае он не может назвать это за кадром? Это в первую очередь случай разумного удержания за руку или это техническая причина?
РЕДАКТИРОВАТЬ
Я знаю , что это языковое ограничение. Мне любопытно , почему это языковое ограничение.
РЕДАКТИРОВАТЬ 2
Похоже, что, как это часто бывает, я был слишком близок к коду, над которым на самом деле работал, чтобы увидеть общую картину. В ответах ниже я опубликовал контрпример, который показывает, почему это Плохая Вещь®.