public class Base {
public Base() {
foo();
}
public void foo() {
System.out.println("Base.foo()");
}
}
public class Derived extends Base {
public Derived() {}
public void foo() {
System.out.println("Derived.foo()");
}
}
А потом, когда я называю те:Как заставить мой конструктор подкласса не вызывать конструктор базового класса?
public class Running {
public static void main(String[] args) {
Base b = new Base();
Derived d = new Derived();
}
}
Он выводит:
*Base.foo()*
*Derived.foo()*
Так почему же, когда он попадает в полученный конструктор, он вызывает базовый конструктор, но использует метод производный-х вместо?
PS: Если я отмечаю эти методы как частные, он будет печатать:
*Base.foo()*
*Base.foo()*
Пожалуйста отступа правильно и будет легче читать. Вы переопределяете метод, поэтому вызывается наиболее конкретная реализация для типа объекта. Переходите к чтению при переопределении метода в производном классе. С другой стороны, не следует избегать вызова конструктора базового класса, потому что необходимо также создать «базовую часть» объекта. В реальной жизни это также чаще всего то, что вы хотите. –