Вызов конструктора суперкласса из подкласса

1
class Top { 
    public Top(String s) { 
        System.out.print("B"); 
    }
}

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

    public static void main(String [] args) { 
        Bottom2 as=new Bottom2("A");
        new Bottom2("C");
        System.out.println(" ");
    }
}

Я хочу вызвать конструктор суперкласса. Почему это не компилируется?

  • 1
    С чего ты взял, что это не называется? Следует печатать BDBD
  • 1
    Конструктор для Top принимает строку, поэтому вы должны были написать super (s);
Показать ещё 1 комментарий
Теги:
inheritance
constructor

5 ответов

3
Лучший ответ

Вызов super() означает, что в базовом классе есть конструктор по умолчанию. Ваш пример не показывает, что поэтому код не компилируется.

Итак, чтобы это правильно работало, просто добавьте вызов в подкласс следующим образом:

public Bottom2(String s) 
{   
    super(s); // call to superclass constructor with parameters.
    System.out.print("D"); 
}
2

Вы вызываете super(), а не super(s). Когда у вас есть параметризованный конструктор, вы больше не можете использовать конструктор no-arg по умолчанию, поэтому super() не будет компилироваться.

  • 1
    Возможно, он не знает, что когда вы определяете конструктор в классе, java больше не предоставляет конструктор по умолчанию, и вы должны сделать это самостоятельно.
  • 0
    конструктора по умолчанию нет - явный конструктор удалил неявный конструктор по умолчанию
Показать ещё 2 комментария
0

Прежде всего, это даст ошибку времени компиляции (потому что если у вас есть аргумент-конструктор в дочернем классе, то у вас не должно быть конструктора -arg в базовом классе), а во-вторых, что компилятор неявно не будет называть конструктор -arg базового класса ( если нет другого вызова конструктора суперкласса или конструктора дочернего класса). поэтому вы не должны писать

super();

поэтому вы должны вызывать явно

super(s);
0

Эта программа даст ошибку времени компиляции. Необходимо включить конструктор по умолчанию Top() в класс Top

0

ваш суперкласс-конструктор содержит 1 строковый параметр, и вы не вызываете свой суперкласс с параметром

в коде super();

должно быть так

супер ("любая строка");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню