2012-04-01 3 views

ответ

0

Чтобы создать экземпляр класса A, Java будет вести себя так, как если бы он первый создает экземпляр B, то есть будет вызываться конструктор суперкласса super(), (или в этом случай, вы это называете сами) и затем «добавление» атрибутов класса A. . Именно поэтому вызов super() всегда должен быть первой инструкцией в конструкторе.

Вы пытаетесь передать аргумент, который в некотором смысле еще не существует, потому что вы пытаетесь читать f до, вы назвали super().

Что вы можете сделать, это следующее:

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, что также будет простым решением.