Сомнение, основанное на программе в SCJP (экзамен 310-065) - PullRequest
1 голос
/ 13 июля 2010
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(" ");
} }

В приведенной выше программе я предположил, что результат должен быть BD, но в книге они сказали, что компиляция не удалась. Кто-нибудь может объяснить это?

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Производный класс Bottom2 необходим для вызова конструктора базового класса с использованием super, в противном случае вы получите ошибку компиляции. Например, если вы сделаете это, он скомпилирует:

public Bottom2(String s) { super(s); System.out.print("D"); }

См. раздел о конструкторах подклассов .

2 голосов
/ 13 июля 2010

Когда у вас есть открытый Top (String s), тогда java не создает конструктор по умолчанию без аргументов, тогда когда вы пишете дочерний класс, конструктор ищет конструктор по умолчанию (потому что вы не вызываете явно) ...тогда компиляция не удалась.

...