как в конструкторе базового класса вызывается метод дочернего класса ?
Long_byte
60 уровень
вопрос
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Novikova Natalia
19 февраля 2024, 20:04
Создать экземпляр дочернего класса в конструкторе базового класса для вызова метода дочернего класса не получится, так как будет бесконечный цикл вызовов конструкторов родителя, потомка, родителя, потомка.....Но, в java есть возможность вызова метода дочернего класса в конструкторе базового класса за счет переопределения метода. В Java, когда вы создаете экземпляр подкласса, конструктор базового класса вызывается первым. Если в конструкторе базового класса вызывается метод, который переопределен в подклассе, то будет вызвана версия метода подкласса.
Однако, это может привести к нежелательным последствиям, если подкласс зависит от инициализации, которая еще не произошла. В общем случае, это считается плохой практикой, и лучше избегать вызова переопределяемых методов в конструкторах.
Вот пример:
public class BaseClass {
public BaseClass() {
print();
}
public void print() {
System.out.println("BaseClass print method");
}
}
public class ChildClass extends BaseClass {
private int i = 1;
@Override
public void print() {
System.out.println("ChildClass print method, i = " + i);
}
public static void main(String[] args) {
ChildClass child = new ChildClass();
child.print();
}
}
В этом примере, когда создается экземпляр ChildClass, сначала вызывается конструктор BaseClass, который в свою очередь вызывает метод print(). Поскольку этот метод переопределен в ChildClass, вызывается версия метода ChildClass. Но поскольку инициализация ChildClass еще не произошла, значение i равно 0, а не 1.
0