class A {
public void m() { }
public A() {
m();
}
}
class B extends A {
private int f = 4;
public void m() {
System.out.println(f);
}
public B() {
m();
f = 3;
m();
}
}
public class Init {
public static void main(String[] args) {
B b = new B();
}
}
02-15-2005, 03:48 AM
sjalle
Its the super class' default constructor that is being
invoked prior to the value declaration of f in the subclass. The superclass' m() method is overridden
by the subclass, so the superclass constructor calls
the subclass' m() method that in turn uses B's class global
variable f in its print statement. This value is
already allocated by the compiler but it has not yet
been assigned the initial value 4, as this assignment procedurally comes after the superclass constructor's invokation.