По runnung следующего кода, который я получил результат:
метод из класса А
метод из класса В.Почему вызов конструктора метода overriden вместо одного из его класса?
public class Test {
static class A {
public A() {
someMethod();
}
public void someMethod() {
System.out.println("method from class A");
}
}
static class B extends A {
public void someMethod() {
System.out.println("method from class B");
}
}
public static void main(String... args) {
new A();
new B();
}
}
Первая строка результата ясно, но второй один не является. Почему конструктор класса А не назвал метод, определенный в классе А, переопределенным методом класса В? Может быть, после компиляции код из конструктора A каким-то образом скопирован в класс B, чтобы мы фактически назовем наш метод из класса B?
Это существенное различие между Java и C++. C++ ведет себя так, как вы ожидаете. Java нет. Почему бы вам не спросить Джеймса Гослинга. – EJP
Я уже не знаком с C++. Разрабатывают ли конструкторы C++ их родительские конструкторы, явно не написанные для этого? Это то, что о.п. ожидает? – Thevenin