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(" ");
}
}
Я хочу вызвать конструктор суперкласса. Почему это не компилируется?
Вызов super()
означает, что в базовом классе есть конструктор по умолчанию. Ваш пример не показывает, что поэтому код не компилируется.
Итак, чтобы это правильно работало, просто добавьте вызов в подкласс следующим образом:
public Bottom2(String s)
{
super(s); // call to superclass constructor with parameters.
System.out.print("D");
}
Вы вызываете super()
, а не super(s)
. Когда у вас есть параметризованный конструктор, вы больше не можете использовать конструктор no-arg по умолчанию, поэтому super()
не будет компилироваться.
Прежде всего, это даст ошибку времени компиляции (потому что если у вас есть аргумент-конструктор в дочернем классе, то у вас не должно быть конструктора -arg в базовом классе), а во-вторых, что компилятор неявно не будет называть конструктор -arg базового класса ( если нет другого вызова конструктора суперкласса или конструктора дочернего класса). поэтому вы не должны писать
super();
поэтому вы должны вызывать явно
super(s);
Эта программа даст ошибку времени компиляции. Необходимо включить конструктор по умолчанию Top() в класс Top
ваш суперкласс-конструктор содержит 1 строковый параметр, и вы не вызываете свой суперкласс с параметром
в коде super();
должно быть так
супер ("любая строка");
BDBD