Объясните код из Java?

e69b0ec0aa6b4f948f2a8b1739a71d84.PNG
Не понял пояснение сайте, объясните почему в строке 3 ошибка, зачем нужен именно конструктор по - умолчанию?
  • Вопрос задан
  • 338 просмотров
Решения вопроса 1
@zelan
Кратко обо мне не получится.
Если в классе A не объявлен ни один конструктор, то он по умолчанию содержит конструктор без параметров - A(), однако, если объявлен хотя бы один конструктор с параметрами, то конструктор A() исчезает. Но исчезает он только тогда, когда явно не объявлен.

Примеры
//содержит неявно 1 конструктор A()
class A{
}

//тоже содержит  конструктор A() но явно
class A{
    A(){
    }
}

//cодержит СОДЕРЖИТ ТОЛЬКО 1 конструктор, конструктора A() уже нет
class A{
    A(int x){
    }
}

//есть оба конструктора
class A{
    A(int x){
    }

    A(){}
}


В примере класс A содержит один конструктор с параметром - A(int x), это значит, что он не имеет конструктора A(), и его нужно (при необходимости) определить самому.

Механизм наследования таков:
- мы хотим создать объект B, вызвав конструктор B(int b)
- первой строкой конструктора должна быть строка super(...) - с параметрами или без, это нужно для того чтобы сначала сконструировался родитель, ведь B унаследован от A
- если первая строка другая, то компилятор подставляет конструктор родителя без параметров - super(), в этом случае будет вызвано создание объекта A с помощью конструктора A().
- но так как в объекте A не определен этот конструктор - вылетает ошибка

Можно исправить так
Либо добавить в объект A конструктор A(), либо в конструктор объекта B, добавить явный вызов конструктор родителя super(int x) ( в данном случае у родителя есть только 1 конструктор - A(int x)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект