我的代码是这样的
public class B {
public B(int f) {
}
}
public class A extends B{
int f=4;
public A() {
super(f);
}
}为什么会出现编译错误?
发布于 2012-04-01 23:28:55
为了创建一个类A的实例,Java的行为就像它先超级创建一个B的实例,这意味着超类的构造函数()将被调用(或者在本例中,您自己调用它),然后然后“添加”类A的属性。这也是为什么()调用总是必须是构造函数中的第一条指令。
您正在尝试传递一个参数,在某种意义上,这个参数还不存在,因为您试图在调用()之前读取f。
您可以执行以下操作:
public class A extends B {
static final int F_CONST = 4;
int f = F_CONST;
public A() {
super(F_CONST);
}
}这里的F_CONST是一个常量“静态”变量,它是一个“类变量”,而不是“对象或实例变量”。静态成员将在类加载到内存中时初始化,这是在调用任何构造函数之前。编译器甚至可以直接用值4替换F_CONST,这也是一个简单的解决方案。
https://stackoverflow.com/questions/9965354
复制相似问题