Справочная информация
У меня есть вопрос относительно вопросов из книги Sierra & Bates, SCJP v6. А именно, Глава 2. Вопрос 2. Дается ответ, что «компиляция не удалась». Однако когда я попробовал это в neBeans, код скомпилировался и работал без ошибок. Это также возвратило вывод "D", который не был одной из альтернатив. На разных форумах обсуждаются некоторые другие вопросы, касающиеся необходимости вставлять super () и т. Д. Однако, похоже, никто не признал, что он может компилироваться.
Вопрос
1. Я ожидал, что конструктор "Bottom2 (String s) ..." назвал супер-конструктор "Top (String s) ...". В этом случае на выходе был бы "BD" (что является опцией на вопрос. Почему не вызывается "Top (String s) ...".
2. Поскольку существует конструктор Top, тогда конструктор компилятора по умолчанию все равно будет создан неявно. т.е. по сути это конструктор "Top () {}", который может быть вызван "Bottom2 (String s)". Это не то, как я понял, что это происходит - то есть компилятор создает это значение по умолчанию, только если не создан другой конструктор.
3. Есть ли ошибка в этом вопросе, или это вопрос переноса из версии Java 5, и каким-то образом в Java 6 компилятор теперь может справиться с этим.
4. Могут ли средства NetBeans «решить» проблему компилятора. Это очень важно, так как я учусь в SCJP, и я считаю, что не все вопросы могут быть продублированы в NetBeans. В этом случае я могу научиться верить, что какой-то код работает, а (для целей экзамена) - нет.
Код включен для удобства пользования.
class Top {
public Top(String s) { System.out.print("B"); }
}
public class Bottom2 extends Top {
public Bottom2(String s) { System.out.print("D"); }
public static void main(String [] args) {
new Bottom2("C");
System.out.println(" ");
}
}