моего кода, как этоhi.using супер в расширении
public class B {
public B(int f) {
}
}
public class A extends B{
int f=4;
public A() {
super(f);
}
}
почему он делает ошибку компиляции?
моего кода, как этоhi.using супер в расширении
public class B {
public B(int f) {
}
}
public class A extends B{
int f=4;
public A() {
super(f);
}
}
почему он делает ошибку компиляции?
Чтобы создать экземпляр класса 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, что также будет простым решением.