Чтобы создать экземпляр класса A, Java будет вести себя так, как если бы она first создала экземпляр B, то есть будет вызван конструктор суперкласса super (), (или в этом случае вы называете это сами) и , а затем «добавляете» атрибуты класса А. Именно поэтому вызов super () всегда должен быть первой инструкцией в конструкторе.
Вы пытаетесь передать аргумент, который в некотором смысле еще не существует, потому что вы пытаетесь прочитать f до того, как вы вызвали super ().
Что вы могли быdo следующее:
public class A extends B {
static final int F_CONST = 4;
int f = F_CONST;
public A() {
super(F_CONST);
}
}
Здесь F_CONST - это постоянная «статическая» переменная, которая является «переменной класса», а не «переменной объекта или экземпляра».Статические члены будут инициализированы, когда класс будет загружен в память, что происходит перед вызовом любого конструктора.Компилятору даже разрешено заменить F_CONST только значением 4 напрямую, что также будет простым решением.