Если вы предоставите конструктор, то Java не будет генерировать вам пустой конструктор по умолчанию. Таким образом, ваш производный класс сможет вызывать только ваш конструктор.
Конструктор по умолчанию не инициализирует ваши личные переменные значениями по умолчанию. Доказательством является то, что можно написать класс, который не имеет конструктора по умолчанию и имеет закрытые члены, инициализированные значениями по умолчанию. Вот пример:
public class Test {
public String s;
public int i;
public Test(String s, int i) {
this.s = s;
this.i = i;
}
public Test(boolean b) {
// Empty on purpose!
}
public String toString() {
return "Test (s = " + this.s + ", i = " + this.i + ")";
}
public static void main (String [] args) {
Test test_empty = new Test(true);
Test test_full = new Test("string", 42);
System.out.println("Test empty:" + test_empty);
System.out.println("Test full:" + test_full);
}
}